多态是java的三大特性之一,但是只能针对一般的方法,对有些特殊情况还是不能够实现的。主要有是包括:私有方法,域和静态方法。
package polymorphism;
public class Sub extends Super {
public int i = 2;
//静态方法
public static void staticMethod() {
System.out.println("Sub static method");
}
//私有方法 编译器会报错
// private void privateMethod() {
// System.out.println("Sub private method ");
// }
public void normalMethod() {
System.out.println("Sub normalMethod");
}
public static void main(String[] args) {
Super sup = new Sub();
//获取域
System.out.println("i = " + sup.i );
//调用静态方法
Super.staticMethod();
//私有方法不能被调用
sup.privateMethod();
//正常方法
sup.normalMethod();
}
}
class Super {
//域
public int i = 1;
//静态方法
public static void staticMethod() {
System.out.println("Super static method");
}
//将会被私有的方法
public void privateMethod() {
System.out.println("Super private method ");
}
public void normalMethod() {
System.out.println("Super normalMethod");
}
}
为什么为造成这样的结果呢?让我直接就想到了方法的绑定机制。
绑定:将一个方法调用同一个方法的主体则称为绑定。绑定分为两种前期绑定和后期绑定(动态绑定、运行期绑定),java中除了static和final方法之外其余的都是后期绑定;java中是通过动态绑定来实现多态的。