多型
某乙個事物,在不同時刻表現出來的不同狀態。
舉例:--| 貓可以是貓的型別。 貓 m = new 貓();
--| 同時貓可以是動物型別,也可以把貓稱為動物。 動物 d = new 貓();
貓這類事物即具備貓的形態,又具備著動物的形態。
class 動物 //父類
class 貓 extends 動物 //子類
class 狗 extends 動物
貓 x = new 貓;
動物 x = new 貓; //父類指向子物件,體現出多型性
多型的前提:
1/多型要有繼承關係
2/必須要有重寫(不重寫就沒意義)
3/ 要有父類引用指向子類物件。(父類 f = new 子類();)
範例:
class fu
}class zi extends fu //前提①:zi類繼承父類
}class duotaidemo
}
多型中的成員訪問特點:
1 / 成員變數
編譯看左邊,執行看左邊。(變數看的父類的)
2 / 構造方法
建立子類物件的時候,訪問父類的構造方法,對父類的資料進行初始化。
3 / 成員方法
編譯看左邊,執行看右邊。(因為方法重寫,父類方法被子類覆蓋,只留下子類方法)
4 / 靜態方法
編譯看左邊,執行看左邊。(靜態方法算不上重寫,靜態和類相關,所以訪問的還是左邊)
由於成員方法存在方法重寫,所以執行看右邊。
多型的好處:
1 / 提高了**的維護性(用繼承保證)
2 / 提高了**的擴充套件性,前期定義的**可以使用後期的內容。(由多型保證)
範例:
/*
通過動物來示範多型的擴充套件性
*/class animal //定義乙個animal父類
public void sleep() }
class cat extends animal //定義乙個cat類繼承anamal類
public void sleep() //重寫父類方法 }
class dog extends animal //定義乙個dog類繼承anamal類
public void sleep() //重寫父類方法 }
/*可以不斷定義新的動物,繼承父類animal的共性,提高了擴充套件性
*/class animaltool //定義乙個animal工具類,呼叫物件方法
public static void useanimal(animal a) //定義乙個靜態animal帶animal引數的方法 }
class duotaidemo_02
}
多型的弊端(侷限性):
不能使用子類的特有功能。
需要用到子類特有功能時可以用的方法:
a / 建立子類物件,呼叫子類方法。(但是不合理,實際是建立了兩個物件:fu f = new zi(); zi z = new zi();)
b / 把父類的引用強制轉換為子類引用。 (zi z = (zi) f;)
物件間轉型:
向上轉型:fu f = new zi();
**向上轉型的作用是限制對物件特有功能的訪問。
向下轉型:zi z = (zi)f;
**向下轉型的目的是為了使用子類中的特有方法。
範例:
class duotime02
public static void method(animal a) //animal a 在不斷指向animal的子類物件,體現了子類物件的多型性 (animal a = new dog(); animal a = new cat();)
}abstract class animal //定義乙個抽象父類
class dog extends animal //定義乙個子類,繼承了父類
void lookhome() }
class cat extends animal
void catchmouse()
}
練習01:南北方人飲食案例
/*
南北方人案例
*/class person
public void eat()
}class southperson extends person
public void eat()
public void sell() }
class northperson extends person //定義北方人類,繼承perfon
public void eat()
public void work() //定義北方人特有方法 }
class duotaitest_01
}
型別判斷 關鍵字 intanceof(通常在向下轉型前用於**健壯性的判斷)
instanceof 用於判斷物件的具體型別,只能用於醫用資料型別判斷。
示例: if ( a instanceof cat)
java物件導向學習筆記
1.類和物件 類可以看成是一類物件的模板,物件可以看成是該類的乙個具體例項.2.類 物件 之間的關係 聚合,繼承,實現,多型.3.記憶體區分 類是靜態概念,區 物件是new出來的,位於堆記憶體 4.構造方法 函式 1 與類同名且沒有返回值 2 用來初始化物件的函式 3 new 構造方法,建立乙個新的...
JAVA學習筆記 物件導向
寫類要重寫equals和hashcode,在類當作map中的key 鍵 時,一定要重寫hashcode,map中的鍵需要使用equals方法,該方法中呼叫了hashcode判斷是否相同。類中成員變數未手動初始化,虛擬機會自動進行初始化。而區域性變數不能自動初始化,提示該變數未初始化。public c...
java 學習筆記 物件導向(繼承)
將學生與工人的共性描述提取出來,單獨進行描述,只要讓學生和工人單獨描述這個類有關係,就可以了 繼承 1,提高了 的服用性。2,讓類與類之間產生了關係,有了這個關係,才有了多型的特性。注意 千萬不要為了獲取其他類的功能,簡化 而繼承。必須是類與類之間有所屬關係才可以繼承 class person st...