多态中成员变量的访问特点:
直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
多态中成员方法的访问特点:
看new的是谁,就优先用谁,没有则向上找
口诀:编译看左边,运行看右边
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边
案例:
创建一个父类Fu:
子类方法
子类特有方法
直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
多态中成员方法的访问特点:
看new的是谁,就优先用谁,没有则向上找
口诀:编译看左边,运行看右边
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边
案例:
创建一个父类Fu:
package DuoTai; public class Fu { int num = 10; public void showNum(){ System.out.println("num"); } public void method(){ System.out.println("父类方法"); } public void methodFu(){ System.out.println("父类特有方法"); } }
创建一个子类Zi继承父类Fu:
package DuoTai; public class Zi extends Fu{ int num = 20; int age = 16; @Override public void showNum() { System.out.println(num); } @Override public void method() { System.out.println("子类方法"); } @Override public void methodFu() { System.out.println("子类特有方法"); } }
package DuoTai; /* 访问成员变量的两种方法: 1. 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。 2. 间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。 */ public class Demo01Multi { public static void main(String[] args) { //使用多态写法,父类引用指向子类的对象 Fu obj = new Zi(); System.out.println(obj.num); //父:10 // System.out.println(obj.age); // 错误写法! System.out.println("========================"); // 子类没有覆盖重写,就是父:10 // 子类如果覆盖重写,就是父:20 obj.showNum(); } }
创建一个Demo02MultiMethod类使用父子类
package DuoTai; /* 在多态中成员方法的访问特点: 看new的是谁,就优先用谁,没有则向上找 */ public class Demo02MultiMethod { public static void main(String[] args) { Fu obj = new Zi(); //编译看左,运行看右 obj.method(); // 父子都有,优先用子 obj.methodFu(); //子类没有,父类有,向上找到父类 //编译看左,左边是Fu,Fu当中没有methodZi方法,所有编译报错。 // obj.methodZi(); //错误写法! } }
子类方法
子类特有方法