解决方法
继承创建类型兼容性.
它允许超类引用
指的是子类的对象.
(反向不是真的).
它允许超类引用
指的是子类的对象.
(反向不是真的).
一个超类引用,指的是
子类的对象,只能用于
访问继承和重写
子类的方法.
在子类中新定义的成员
无法参考
超级.
class A { void f1() { //this holds address of object of B System.out.println("A f1"); } void f2() { System.out.println("A f2"); } }//A class B extends A { void f3() { //new method System.out.println("B f3"); } void f2() { //this holds address of object of B System.out.println("B f2 starts"); f3(); //this.f3() System.out.println("B f2 ends "); } } //B class TypeCmptbl { public static void main(String args[]) { A ref; //reference of A ref = new B();//Object of B //ref.inherited() allowed ref.f1(); //ref.overridden() allowed ref.f2(); //ref.newMembersOfChild() not allowed //ref.f3(); }//main }
考虑一下这句话
ref.f2();
这里ref是A类的参考
它有B类对象的地址
f2()是一个重写方法.
当编译器检测到这样的语句时
然后它不会将函数调用与任何绑定
定义.它只验证通话.
这些调用的绑定留给运行时环境.在程序运行时系统识别对象的数据类型并绑定函数调用与函数定义提供的对象类.这种类型的功能之间的绑定调用和函数定义称为“后期绑定”或“运行时绑定”或“运行时多态”或“动态方法调度”.