Java多态性:父类引用指向子类对象

public class Fu {
int num=10;
}
public class Zi extends Fu{
int num=20;
}

1.直接通过对象名称访问成员变量

Fu fu=new Zi();
System.out.println(fu.num);

输出结果为10;
所以说,直接访问成员变量遵从父类,子类不可覆盖重写。
2.间接从成员方法中访问。
我们在刚刚的两个类中都添加一个方法。

public void show()
{
    System.out.println(num);
}

然后再来调用

Fu fu=new Zi();
fu.show();

输出结果为20;
如果将Zi类中show的方法去掉,那么输出还是10;
故通过间接方法来调用成员变量时,应该看该方法属于谁,就调用谁,如果没有,则向上查找。
二.成员方法的访问规则
看new的是谁,就优先调用谁,没有则向上找。
父类的两个方法

public void show()
{
    System.out.println(num);
}
public void fumethod()
{
    System.out.println("父类特有的方法!");
}

子类的两个方法

public void show()
{
    System.out.println(num);
}
public void Zimethod()
{
    System.out.println("这是子类特有的方法");
}

接下来验证一下

    Fu obj=new Zi();//多态
        obj.show();//父子都有,优先调用子类
        obj.fumethod();//子类没有,父类有,向上找到父类
        obj.Zimethod();//报错

其实很简单,只需要记住一个口诀,编译看左边,运行看右边。
编译的时候看父类有没有该方法,没有报错,有的话运行看右边有没有该方法,有则优先用右边,没有就用父类即可。