对于java的动态绑定,我是这么理解的
public class A{ public void test(){ System.out.println("调用A的test方法"); } public void atest(){ System.out.println("调用A的atest方法"); } }
public class B extends A{ public void test() { System.out.println("调用B的test方法"); } public void btest(){ System.out.println("调用B的btest方法"); } }
public class Test { public static void main(String[] args) { A a=new B(); a.test();//此处输出“调用B的test方法” a.atest();//此处输出“调用A的atest方法” a.btest();//此处会报编译错误 } }
当父类指向子类时,调用父类和子类都有的方法时,运行子类的重写方法。
如上B重写了A的test的方法,则调用B的test方法。
当父类指向子类时,调用父类有,但子类没有的方法时,运行父类的方法
子类默认继承父类方法(私有的除外),即默认重写了父类的方法,调用的是super.父类方法
如上B没有A中的atest方法,但B继承了A,所以调用A的atese方法
当父类指向子类时,调用子类中,父类没有的方法时,会提示编译错误
如上B调用了btest方法,A中没有该方法,所以编译错误
这就是java的动态绑定,个人理解是这样的,欢迎指正