1. 程式人生 > 其它 >8、Java——面向物件:多型,引用資料型別:轉型,抽象的,介面

8、Java——面向物件:多型,引用資料型別:轉型,抽象的,介面

1多型

(1)一種事物的多種形態|多種表現形式,行為的多型,一個行為的不同的實現方式。

(2)多型的前提:類的繼承|介面的實現。

(3)多型的最終體現:父類的引用指向子類的物件。

(4)多型呼叫:會呼叫子類中重寫的方法。

(5)多型的實現效果:配合方法的重寫,當父類引用指向不同的子類物件,同一個方法具有不同的實現方式-->行為多型。

(6)多型呼叫成員的特點:

父類引用呼叫。

成員變數:編譯執行看父類|左邊|型別。

成員方法:編譯看父類|左邊|型別。
執行找子類|右邊|物件。

(7)注意: ①多型是行為的多型。

②多型如果不配合方法的重寫沒有意義。

③父類引用對子類新增內容不可見。

④如果多型想要有意義,需要配合方法的重寫,多型才有意義。

(8)做題四大原則:

①繼承鏈:自己沒有找父。

A

|

B

/ \

C D

②編譯看型別、確定方法,執行找物件。

③就近最優原則。

④父類引用對子類新增方法不可見,編譯期間能夠確定所呼叫的方法。

2引用資料型別 : 轉型

(2)向上轉型 : 自動型別提升。

Person p = new Student(); --> 多型。

(3)多型呼叫: 對子類新增內容不可見。

(4)向下轉型 : 強制型別轉換。

Student s = (Student)p;

通過s引用呼叫Student型別所有的內容。

(5)ClassCastException 型別轉換異常,引用強轉型別的時候,沒有轉為指向的子類物件型別,轉為了其他子類型別,出現的異常。

(6)預防出出現型別轉換異常->instanceof 運算子。

(7)引用 instanceof 型別:判斷前面的引用是否指向後面型別的物件或者後面型別子類的物件,是->true 不是->false。

3、抽象的

1)抽象類: 被abstract修飾的類。

(2)抽象方法: ①被abstract修飾的方法。

②沒有方法體。

③存在與抽象類中。

(3)開發部門:

Develop 開發部 work()

java攻城獅 work(){"伺服器端開發"}

web程式猿 work(){"客戶端開發"}

(4)抽象類的特點:

①抽象類不能例項化。

②抽象類可以定義任意內容(屬性,功能(抽象的方法,具體的方法))。

③抽象方法必須要求被重寫。

④抽象類使用: 通過具體子類物件使用。

具體子類: 重寫所有的抽象方法 + 按需新增。

抽象子類: 按需重寫抽象方法 + 按需新增。

⑤一個抽象方法一旦被重寫,可以不再被重寫,根據需求決定。

⑥abstract不能與private,final,static,native 一起使用。

⑦抽象類可以實現多型。

4介面

(1)介面可以理解為是一個特殊的抽象類

(2)功能的集合,引用資料型別,介面可以幫助定義規範,解耦-->降低耦合度,類是單繼承,介面多實現的

(3)定義 :interface 定義介面

(4)組成:

①jdk7及之前:

公共的靜態的常量

public static final--> 修飾符可以任意省略

公共的抽象的方法

public abstract --> 修飾符可以任意省略

②jdk8中新增:

1.靜態方法 : 可以定義方法體

使用: 通過介面名使用

2.預設方法 : 可以定義方法體

顯示的被default修飾

使用: 通過實現類物件使用

③jdk8及之後:

使用:

a.介面不能例項化

b.介面需要通過實現類的物件使用

c.父類需要通過子類繼承 extends -->父類中的成員,子類繼承父類有權可以直接使用,介面需要通過實現類去實現 implements --> 因為介面中幾乎都是抽象方法沒有方法體,需要實現類自己實現方法體,所有叫做實現,介面的實現與類的繼承很像,都擁有了父類的成員使用權,或者擁有介面中定義的功能,但是一個側重點在拿過來就用,一個側重點在拿過來要實現才能用

d. 介面的使用:

具體的實現類 : 重寫所有的衝向方法 + 按需新增

抽象的實現類 : 按需重寫 + 按需新增

e.介面可以多實現,類只能單繼承

f.如果一個類同時繼承父類實現介面,要求先繼承後實現

(5)注意:

①.父類與介面無法完全相互代替,如果可以建議使用介面,因為介面可以多實現非常靈活

②類與類之間只能繼承

類與介面之間,只能是類實現介面

類與類之間只能單繼承

類與介面之間可以多實現

介面與介面之間,可以多繼承

③介面可以實現多型 介面引用指向實現類物件