java编程思想-多态
java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是动态绑定即运行时绑定。
public class test { private void f() { System.out.println("private f()"); } public static void main(String[] args) { test t = new Derived(); t.f(); } } class Derived extends test { public void f() { System.out.println("public f()"); } } /* private f() private 方法被自动认为是final方法,没有多态,静态绑定,直接调用基类的方法 */
只有普通的方法调用可以是多态的,如果你直接访问某个域,这个访问将在编译期进行解析,没有多态
class Super { public int field = 0; public int getField(){return field;} } class Sub extends Super { public int field =1; public int getField(){return field;} public int getSuperField(){return super.field;} } public class test { public static void main(String[] args) { Super sup = new Sub(); System.out.println(sup.field+" "+sup.getField()); Sub sub = new Sub(); System.out.println(sub.field+" "+sub.getField()+" "+sub.getSuperField()); } } /* 0 1 1 1 0 */
如果某个方法是静态的,它的行为不具有多态性。
class Super { public static void getField(){System.out.println("Super");} } class Sub extends Super { public static void getField(){System.out.println("sub");} } public class test { public static void main(String[] args) { Super sup = new Sub(); sup.getField(); } } /* Super */