关于java中的多态的理解
我们知道在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();//fa是对Son对象的一个引用,为什么这个方法不能被调用?
}
麻烦各位高手能够给我这个菜鸟讲讲这个问题,越透彻越好,能讲到内存机制更好!
[解决办法]
从内存来考虑:
当之类被实例化后会先实例出一个父类。因为子类中有一个隐藏的引用super会指向父类实例,由于子类中包含了父类的实例,所以子类可以调用父类的方法.
而Father fa=new Son();子类 只是指向了new son()中实例的父类实例对象.所以只能调用父类的方法,而不能调用之类的方法。
[解决办法]
动态方法调用
[解决办法]