/*
* 访问成员变量的两种方法:
*
* 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 }