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();//报错
其实很简单,只需要记住一个口诀,编译看左边,运行看右边。
编译的时候看父类有没有该方法,没有报错,有的话运行看右边有没有该方法,有则优先用右边,没有就用父类即可。