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