多态中成员变量/成员方法的使用特点---Java

/*
* 访问成员变量的两种方法:
*
* 1. 直接通过对象名称访问成员变量: 看等号左边是谁,优先用谁,没有则向上找
* 2. 间接通过成员方法访问成员变量: 看该方法属于谁,优先用谁,没有则向上找
* */

/*
* 换言之:
* 当访问成员变量,优先等号左侧(父类)
* 当访问成成员方法,1. 子类重写-->优先子;2. 子类继承没重写--->优先父*/


 1 public class Fu {
 2     int num = 10;
 3   //成员变量特点分析
 4     public void showNum(){
 5         System.out.println(num);
 6     }
 7     public void fuShow(){
 8         System.out.println(num);
 9     }
10   //成员方法特点分析
11     public void method(){
12         System.out.println("父类方法");
13     }
14     public void methodFu(){
15         System.out.println("父类特有方法");
16     }
17 }
 1 public class Zi extends Fu{
    //成员变量分析
2 int num = 20; 3 4 int age = 24; 5    6 @Override 7 public void showNum(){ 8 System.out.println(num); 9 } 10   //成员方法分析 11 @Override 12 public void method(){ 13 System.out.println("子类方法"); 14 } 15 public void methodZi(){ 16 System.out.println("子类特有方法"); 17 } 18 }
 1 public class Demo01MultiField {
 2 
 3     public static void main(String[] args) {
 4         //多态的写法,父类引用指向子类对象
 5         Fu obj = new Zi();
 6 
 7         System.out.println(obj.num);//优先父类-- 对象名称访问成员变量,看等号左边是谁
 8         // System.out.println(obj.age);  //不会向下查找
 9 
10         System.out.println("===============================");
11         obj.showNum();  // 20--->  成员方法访问成员变量,子类重写了该方法,即子类也有该方法,优先子类
12 
13         obj.fuShow();  //  10--->  成员方法访问成员变量,子类继承了没重写,看该方法属于谁,优先用谁
14     }
15 }
/*
* 在多态的代码当中,成员方法的访问规则是:
* 看new的是谁,就优先用谁,没有则向上找*/

/*口诀:
* 编译看左边,运行看右边
*
* 对比一下:
* 成员变量 :编译看左,运行还看左
* 成员方法 :编译看左边,运行看右边
* */


 1 public class Demo02MultiMethod {
 2 
 3     public static void main(String[] args) {
 4         Fu obj = new Zi();
 5 
 6         obj.method();  //父子都有,优先子
 7         obj.methodFu();  //子类没有,父类有,向上找到父类
 8 
 9         //编译看左,左边是Fu,Fu中没有methodZi方法,所以报错
10         //obj.methodZi();
11 
12 
13     }
14 }
原文地址:https://www.cnblogs.com/zeon/p/13500532.html