多型與抽象

2021-09-28 11:11:15 字數 2259 閱讀 8354

多型
相同的行為,不同的實現。

多型的分類;

靜態多型:編譯時,系統就能決定呼叫哪個方法

單獨的重寫也是靜態多型

動態多型:執行中系統才能動態確定方法所指的物件。

多型的實現

靜態多型:使用過載實現

動態多型

基本型別			引用型別	

發生 「=」左右兩端,賦值的時候

轉換形式 1自動 小轉大 1自動 向上轉換 子類繼承父類

2強制 大轉小 2強制 向下轉換 父類繼承子類

使用範圍 不是所有的基本資料型別 不是所有的引用型別可以相互轉換

可以相互轉換 必須是繼承關係才能相互轉換

要想編譯通過,執行也通過。

最終只有兩種效果,

第一種父類引用指向子類物件

第二種本類引用指向本類物件

本類引用指向子類物件

編譯通過:是因為子類和父類就是is-a的關係,所以子類物件就是父類型別的,

執行通過:是因為每個子類物件在產生過程中,都是採用記憶體疊加的方式。

先產生父類物件部分(就是乙個完整的父類物件),然後再疊加子類特有的。

所以,這個子類物件擁有父類型別定義的一切內容。

唯一的問題:

當使用父類引用指向子類物件的時候,該引用只能操作到該物件身上繼承與父類的屬性或行為,

操作不到這個子類物件自己特有的屬性和行為。

特例 ----也是動態多型的關鍵

如果子類重寫了父類的行為,那麼只要物件是子類物件,

不管用宣告引用去指向(父類也好,子類也好),效果都會是子類重寫的效果。

舉例:動物叫,狗叫貓叫

動態多型:

1、給的是父類的引用

2、因為父類引用只能看見來自父類的部分,

所以這個方法一定要定義在父類身上,然後再子類重寫

動態繫結技術:

執行時根據父類引用變數所指向物件的實際型別執行相應的子類方法,從而實現多型性。

由於父類引用可以指向子類物件,且是自動型別轉換,沒有任何特殊語法。

那麼我們在書寫**的時候,手裡如果有乙個父類

instanceof關鍵字:

物件 instanceof 資料型別

判斷某個物件是否是某個資料型別

返回型別:true false

多型總結:

使用父類型別的引用指向子類的物件。

該引用只能呼叫父類中定義的方法,不能呼叫子類中獨有的方法。

如果子類中重寫了父類中的乙個方法,那麼在呼叫該方法的時候,將會呼叫子類中的這個方法。

在多型中,子類可以呼叫父類中的所有方法。

抽象方法:

父類的某些方法,只能確定方法宣告。

(即子類共有的方法叫什麼名字,有什麼引數,返回值為什麼型別,訪問修飾符應該是什麼)

但是不能確定方法的具體實現(因為不同的子類具體實現不同,所有具體的實現應該讓子類重寫)

語法:

在方法修飾符部分書寫abstract修飾符,方法不能有實現部分(包括不能有{})

在方法的引數列表最後用:結束

影響:它可以在編譯期,強制要求子類的實現必須重寫來自父類的抽象方法。

(抽象類的子類必須重寫它的抽象方法,除非子類也是抽象類)

抽象類與抽象方法的關係:

(1)有抽象方法的類必須是抽象類

(2)抽象類不一定有抽象方法

但是從設計上來說,如果抽象類沒有抽象方法,就失去了抽象的意義了。

(3)抽象可以通過 繼承 傳遞的。

比如:父類有三個抽象方法,子類只能確定實現其中的1個或2個,那麼子類仍然具有抽象方法。

所以這個子類也必須是抽象類,再由子類的子類進一步重寫實現。

抽象類:

某些類的設計用途就是拿來做父類的,而不是產生物件的。

為了避免無操作,把這種類設計為抽象類。

語法:在class關鍵字面前加修飾符 abstract

影響;—抽象類只是不能產生物件了,但不影響別的內容。

1該有的書寫、行為、構造、初始化塊、…都可以有

2仍然可以指向子類的物件,訪問共有的屬性行為

3與子類的關係還是is-a,甚至應該說先考慮到is-a的關係才設計父類,

在通過是否需要產生父類物件,來判斷是否設計為abstract

抽象類和抽象方法的好處

從設計的角度看,將乙個抽象方法放到父類中,可以強制任何子類實現乙個特別的行為。

繼承抽象方法的子類如果想要例項化物件,必須重寫該方法

多型與抽象

動態多型技術基礎 向上轉型 引用資料型別轉型,只能發生在父子之間。不能指鹿為馬 子類和子類之間,不是父子關係,不能相互轉換 為什麼父類的引用,可以指向子類的實現?因為子類的例項中,一定擁有乙個完整的父類的所有的值資料 引用資料型別向上轉型,是指子類向父類轉型,這個編譯器會自動識別,能自動轉換成功,原...

筆記 多型與抽象相關

最近有些累了.多型多型就是物件的多種狀態 多型的兩種形式 使用父類作為方法形參實現多型 使用父類作為方法返回值 三要素編寫具有繼承關係 的父類和子類 子類重寫父類方法 使用 父類的引用指向子類的物件 抽象類抽象類是為子類提供乙個 規範 修飾符 abstract 類名 修飾符 abstract 返回值...

抽象類 多型與介面

abstract 修飾的類為抽象類 方法為抽象方法。含有抽象方法,必被宣告為抽象類。抽象類不能例項化。不能修飾私有方法 構造器 靜態方法 final方法。final 修飾的類不能被繼承 修飾的方法不能被子類重寫 標記的變數名稱大寫且只能被賦值一次。介面介面中所有方法均為公共抽象方法。pulic ab...