我们知道在java中我们可以声明超类的变量来引用子类的对象,我们知道被声明为超类变量的实际引用是子类的对象,而在调用方法时根据隐式参数来确定调用哪个对象的方法, 那么为什么我们不能够用这个变量调用超类中没有定义而在子类新写的方法呢?
比如我们写两个类 - class Father
- {
- protected void showInfo()
- {
- System.out.println("Father");
- }
- }
- class Son extends Father
- {
- protected void showInfo()
- {
- System.out.println("Father");
- }
- void play()
- {
- System.out.println("play");
- }
- }
- public class TestSon
- {
- Father fa=new Son();
- fa.showInfo();
- fa.play();//<font color="#ff0000">fa是对Son对象的一个引用,为什么这个方法不能被调用?</font>
- }
复制代码麻烦各位高手能够给我这个菜鸟讲讲这个问题,越透彻越好,能讲到内存机制更好!
|