Java多型之編譯看左,執行看左/右
阿新 • • 發佈:2018-12-14
Java中多型的前提: A:有繼承關係 B:有方法重寫(不是必須) C:有父類引用指向子類物件
多型中成員的訪問特點: A:成員變數:編譯看左邊,執行看左邊。 B:成員方法:編譯看左邊,執行看右邊。
多型的好處:提高了程式的擴充套件性 具體體現:定義方法的時候,使用父型別作為引數,將來在使用的時候,使用具體的子型別參與操作。多型的弊端:不能使用子類的特有功能
向上轉型: 從子到父 父類引用指向子類物件向下轉型: 從父到子 父類引用轉為子類物件
程式碼(父類/子類/實現類):
package com.test; public class Person { // private String name; public String name = "PersonName";// 測試,暫且改為public // private int age; public int age = 20; // 測試,暫且改為public public void eat() { System.out.println("父類方法:人都要吃飯"); } public void sleep() { System.out.println("父類方法:人都要睡覺"); } //get/set方法等。。。 }
package com.test; public class Student extends Person { // private String name; public String name = "StudentName";// 測試,暫且改為public // private int age; public int age = 18; // 測試,暫且改為public public int studentNum = 001; @Override // 子類重寫父類eat方法 public void eat() { System.out.println("子類重寫方法:學生要吃飯"); } @Override // 子類重寫父類sleep方法 public void sleep() { System.out.println("子類重寫方法:學生都要睡覺"); } public void study() { System.out.println("子類獨有方法:學生要學習"); } // get/set方法等。。。 }
package com.test;
public class TestDemo {
public static void main(String[] args) {
// 多型中成員的訪問特點:
// A:成員變數:編譯看左邊,執行看左邊。
// B:成員方法:編譯看左邊,執行看右邊。
// 多型,向上轉型:
Person p = new Student();
// 編譯看左邊:
// p.studentNum //訪問子類獨有成員變數報錯,編譯不通過
// p.study(); //訪問子類獨有成員方法報錯,編譯不通過
// 成員變數:執行看左邊
System.out.println(p.name); // PersonName
System.out.println(p.age);// 20
// 成員方法:執行看右邊
p.eat();// 子類重寫方法:學生要吃飯
p.sleep();// 子類重寫方法:學生都要睡覺
}
}
相關參考:
歡迎大家交流指正,討論完善!