1. 程式人生 > 實用技巧 >Java面向物件-多型性

Java面向物件-多型性

面向物件特徵之三:多型性
*
* 1.理解多型性:可以理解為一個事物的多種形態。
* 2.何為多型性:父類的引用指向子類的物件
* 3.多型的使用,虛方法呼叫
* 有了物件的多型性以後,我們在程式設計期,只能呼叫父類中宣告的方法,但在執行期,我們實際執行的是子類重寫父類的方法。
*
* 總結:編譯看左邊,執行看右邊
*
* 4.多型性使用的前提:
* ①繼承關係
* ②方法的重寫
*
*
* 5.為什麼要有多型性?
*
* 6.多型性不用於屬性(屬性:編譯執行都看左邊)
*
*
* 向上轉型(多型)
*
*
*
*
* 向下轉型(使用)
*
*有了物件的多型性以後,記憶體中實際上是載入了子類特有的屬性和方法,但是由於變數宣告為父類型別,導致
*編譯時,只能呼叫父類中宣告的屬性和方法。子類特有的屬性和方法不能呼叫。
*
*如何才能呼叫子類特有的屬性和方法?
*向下轉型,使用強制型別轉換
*
*使用強轉型時,可能出現異常
*
*instanceof關鍵字使用
* a instanceof A :判斷物件a是否是類A的例項,如果是,返回true;如果不是返回false
* 使用情景:為了避免向下轉型時出現異常,我們在向下轉型之前,先進行instanceof的判斷,一旦
* 返回true,就進行向下轉型。如果返回false,不進行向下轉型。


public class PersonTest {
    public static void main(String[] args) {
        
// // Person p1=new Man(); // p1.eat(); // p1.earnMoney(); //有了物件的多型性以後,記憶體中實際上是載入了子類特有的屬性和方法,但是由於變數宣告為父類型別,導致 //編譯時,只能呼叫父類中宣告的屬性和方法。子類特有的屬性和方法不能呼叫。 //如何才能呼叫子類特有的屬性和方法? //向下轉型,使用強制型別轉換 //使用強轉型時,可能出現異常 // // instanceof關鍵字使用 // a instanceof A :判斷物件a是否是類A的例項,如果是,返回true;如果不是返回false
//下轉型物件 Person p2=new Man(); // Man man=(Man)p2; // man.earnMoney(); // Women women=(Women)p2; if(p2 instanceof Women) { Women women=(Women)p2; women.sleep(); } } } class Person { int age; String name; public void eat() { System.out.println("吃飯"); } public void walk() { System.out.println("走路"); } } class Man extends Person{ boolean fat; @Override public void eat() { System.out.println("男人吃飯"); } @Override public void walk() { System.out.println("男人走路"); } public void earnMoney() { System.out.println("賺錢"); } } class Women extends Person{ boolean height; @Override public void eat() { System.out.println("女人吃飯"); } @Override public void walk() { System.out.println("女人走路"); } public void sleep() { System.out.println("睡覺"); } }