Fu f = new Zi();,编译时f是Fu的引用,查阅Fu中是否有调用的方法;运行时,f是Zi中的对象,查阅Zi中是否有可调用的成员(编译看左边运行看右边)。(原因是编译期间没有对象建立)
method()是子类中的方法,父类中没有,编译时没有建立对象,在编译期要生成的Fu.class文件中并没有method()方法,所以f.method(); 无法通过编译。
f.show();运行结果是zi show,因为运行时前面建立了Zi的对象实例,当父类引用f指向其子类的对象的时候,子类复写父类的方法,通过f访问的是子类对象的成员。(多态) |