多态中成员变量/成员方法的使用特点---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 }