多 態 (物件導向特徵之三)

2022-09-15 11:33:12 字數 2467 閱讀 1721

函式本身就具備多型性,某一種事物有不同的具體的體現。

體現:父類引用或者介面的引用指向了自己的子類物件。//animal a = new cat();

多型的好處:提高了程式的擴充套件性。

多型的弊端:當父類引用指向子類物件時,雖然提高了擴充套件性,但是只能訪問父類中具備的方法,不可以訪問子類中特有的方法。(前期不能使用後期產生的功能,即訪問的侷限性)

多型的前提:

1:必須要有關係,比如繼承、或者實現。

2:通常會有覆蓋操作。

多型的出現思想上也做著變化:以前是建立物件並指揮物件做事情。有了多型以後,我們可以找到物件的共性型別,直接操作共性型別做事情即可,這樣可以指揮一批物件做事情,即通過操作父類或介面實現。

class 畢姥爺{

void 講課(){

system.out.println("企業管理");

void 釣魚(){

system.out.println("釣魚");

class 畢老師 extends 畢姥爺{

void 講課(){

system.out.println("j**a");

void 看電影(){

system.out.println("看電影");

class {

public static void main(string args) {

畢姥爺 x = new 畢老師();//畢老師物件被提公升為了畢姥爺型別。

//     x.講課();

//     x.看電影();//錯誤.

畢老師 y = (畢老師)x;//將畢姥爺型別強制轉換成畢老師型別。

y.看電影();//在多型中,自始自終都是子類物件在做著型別的變化。

如果想用子類物件的特有方法,如何判斷物件是哪個具體的子類型別呢?

可以可以通過乙個關鍵字instanceof ;//判斷物件是否實現了指定的介面或繼承了指定的類

格式:<物件instanceof型別> ,判斷乙個物件是否所屬於指定的型別。

student instanceof person = true;//student繼承了person類

多型在子父類中的成員上的體現的特點:

1,成員變數:在多型中,子父類成員變數同名。

在編譯時期:參考的是引用型變數所屬的類中是否有呼叫的成員。(編譯時不產生物件,只檢查語法錯誤

再說的更容易記憶一些:成員變數---編譯執行都看=左邊。

2,成員函式。

編譯時期:參考引用型變數所屬的類中是否有呼叫的方法。

執行事情:參考的是物件所屬的類中是否有呼叫的方法。

為什麼是這樣的呢?因為在子父類中,對於一模一樣的成員函式,有乙個特性:覆蓋。

簡單一句:成員函式,編譯看引用型變數所屬的類,執行看物件所屬的類。

更簡單:成員函式---編譯看=左邊,執行看=右邊。

3,靜態函式。

編譯時期:參考的是引用型變數所屬的類中是否有呼叫的成員。

為什麼是這樣的呢?因為靜態方法,其實不所屬於物件,而是所屬於該方法所在的類。

呼叫靜態的方法引用是哪個類的引用呼叫的就是哪個類中的靜態方法。

簡單說:靜態函式---編譯執行都看 = 左邊。

多型(3)物件導向的三大特徵之三

多型 重寫方法 1 位置 子類和父類中有同名方法 2 方法名相同,返回值型別和修飾符相同 方法體不同 有時候子類會替代父類的方法 多型的形式一 public void feed pet pet mas.feed cst 父類做形參,子類做實參 程式中的多型,由於條件按不同,產生的結果也不同 多型 同...

物件導向三大特徵 多型

訊息是乙個物件與另乙個物件的通訊單元,是要求某個物件執行類中定義的某個操作的規格說明。傳送給乙個物件的訊息定義了乙個方法名和乙個參數列 可能是空的 並指定某乙個物件。物件接收的訊息則呼叫訊息中指定的方法,並將形式引數與參數列中相應的值結合起來。如有兩個類分別是教練和運動員,如下 教練類 public...

00007物件導向的基本特徵之三 多型

1 封裝 和許可權修飾符有關 2 繼承 extends 3 多型 你們怎去理解多型的呢?多型 多種形態 變數的引用形式 1 本態引用 左邊的變數與右邊的物件是同一種型別 2 多型引用 左邊的變數是父類型別,右邊的物件是子類的物件 多型的表現出來的特徵 編譯型別與執行時型別不一致 編譯的時候,按照父類...