JAVA基礎 多型

2021-07-03 19:10:49 字數 2206 閱讀 2341

概念:

乙個事物的多種形態

多型前提和體現

1.有繼承關係或者實現關係

2.有方法重寫

3.有父類引用指向子類物件

//父類

public class fu

}//子類

public class zi extends fu

}public class demo

}

1.提高了程式的維護性(由繼承保證)

我的理解:

1.如果是多型的形式,可以利用子類的方法覆蓋進行後期的維護

(因為在多型中子類的存在就是為了方法覆蓋,

所以子類的**會比較少,修改起來也比較清晰)

2.如果不是多型形式,只能在父類大批量的**中進行修改

提高了程式的擴充套件性(由多型保證)

例如:

public void show(object  obj)

如果乙個方法接收的引數是乙個父類,那麼多型就已經形成了。

這個父類的所有子類都可以傳進 這個方法。

泛型可以對此進行限定。

多型的弊端:

父類不能訪問子類的特有方法

如果非要訪問,向下轉型(強轉)

zi  zi=(zi) fu;//fu為多型物件

執行流程:

//父類

public class fu

public string show()

}//子類

public class zi extends fu

// 覆蓋了父類的show方法

public string show()

}public class demo

}

main方法壓棧後,用父類引用建立子類物件。

其實不用父類的引用程式的結果也是一樣的。

建立子類物件可以理解為--呼叫子類的構造方法。

而子類的構造方法的第乙個語句是super();

這是隱式的語句,和構造方法一樣,你不寫編譯器幫你寫。

它的存在造成了父類的構造方法先執行,

相當於子類的構造方法還沒執行就掉用了父類的構造方法。

因此,父類構造方法壓棧了,壓棧之後它先執行super();

之後將 i 賦值為6。

並且它的輸出語句先得到執行。

但它的輸出語句中用到了show()方法,它需要先從show()方法中得到返回值。

那麼問題來了,到底呼叫哪乙個show()方法?

這就要先說乙個問題,是誰在掉用show()方法呢?

其實在show()的前面還隱藏了乙個關鍵字-----this.

那this代表誰呢?

誰把父類的構造方法拉進棧的this就代表誰。

也就是說show()方法是子類在掉用,它也壓棧了。

因為子類有show()方法,而且子類和父類還存在繼承關係,所以方法被覆蓋了。

而show()方法需要列印變數 i 但此時 子類中的 i 並沒有被賦值,

子類的super();語句結束之後才會將 i 賦值為8,

子類和父類定義了相同的變數,需要super.i呼叫才會使用父類的變數。

所以列印結果為:

zi----show-run0

列印完之後

因為show()方法是子類的,

所以將"zi"返回給了父類構造方法的輸出語句,

show()方法彈棧,

所以列印的第二句話是:

fu---runzi

父類構造方法彈棧。

子類的super();執行完畢,將 i 的值賦值為8。

之後輸出語句,呼叫show()方法(這裡也隱藏這this,只不過子類與掉用者不存在繼承關係,所以show()方法沒變),

show()列印語句:

zi----show-run8

列印之後將「zi」返回給構造方法的輸出語句-------彈棧

子類的構造方法列印:

zi----runzi

子類彈棧;

main方法建立物件完畢,將new zi();的位址值賦值給了fu;

main方法輸出語句,因為呼叫了fu.show(),所以先列印:

zi----

show-run8

之後列印:

mainzi

main方法彈棧,程式結束。

本人見解未必真實

java 基礎 多型

4.8 多型 定義 某一類事物的多種存在形態。例 動物中貓,狗。貓這個物件對應的型別是貓型別 貓 x new 貓 同時貓也是動物中的一種,也可以把貓稱為動物 動物 y new 貓 動物是貓和狗具體事物中抽取出來的父型別。父型別引用指向了子類物件。多型性簡單說就是乙個物件對應著不同型別。體現 父類或者...

java基礎多型

首先定義乙個boss,叫zeroboss,會使用各種兵器,收了兩個徒弟,並分別贈送他們一件兵器 package zzq public class zeroboss 然後定義乙個zero的徒弟一zeroone,會使用屠龍刀 package zzq public class zeroone extend...

Java基礎 多型

多型性是指允許不同型別的物件對同一訊息做出相應。具有靈活性 抽象 行為共享 共享的優勢,共享就意味著最大化利用和簡潔,還有就是載入速度。一 多型的作用 消除型別之間的耦合關係。即同一事件發生在不同的物件上會產生不同的結果。二 多型的實現形式 1.過載 發生在同乙個類中 2.覆蓋 發生在子類中 三 多...