多型和抽象

2021-09-28 11:05:02 字數 2290 閱讀 4322

乙個物件有多重形式的能力,相同的行為不同的實現。

乙個介面,多種實現

編譯時系統決定呼叫哪個方法

通過方法的過載實現

方法的過載滿足相同的行為不同的實現

單獨的重寫也是靜態多型

過載1.過載只能通過不同的方法引數來區分。 例如不同的引數型別, 不同的引數個數, 不同的引數順序。

2.不能通過訪問許可權、 返回型別、 丟擲的異常進行過載。

重寫重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!

執行中系統動態確定方法所指的物件

使用動態繫結和重寫

1. 向上轉型技術

基本資料型別 賦值左右兩邊的資料型別不同 分為自動型別轉換  強制型別轉換 使用範圍 不是所有的基本資料型別都能轉換 boolean型別不可以

引用資料型別 賦值左右兩端的引用資料型別不同 自動型別轉換(向上轉型) 強制型別轉換(向下轉型)使用範圍 有繼承關係的物件可以實現轉換

編譯通過且執行通過

父類引用指向子類物件

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

執行通過,因為每個子類物件在產生過程中,都是採用記憶體疊加的方式先產生父類物件的部分,再疊加子類特有,所以這個子類物件有父類型別定義的一切內容

唯一的問題:當使用父類引用指向子類物件的時候該引用只能操作到改物件身上繼承與父類的屬性和行為,操作不到這個子類物件特有的屬性和行為。

本類引用指向本類物件

特例: 如果子類重寫了父類的行為,那麼只要物件是子類物件,不管用什麼引用去指向效果都是子類重寫後的效果

2. instanceof關鍵字

父類引用可以指向任意乙個子類物件,並且是自動型別轉換我們在書寫**時,手裡有乙個父類引用,那麼我們不能確定它到底指向那種資料型別。

這時使用instanceof關鍵字判斷。

!!!判斷某個物件是不是某個資料型別

返回型別true/false

if(this.物件 instanceof 物件型別){}

instanceof是乙個關鍵字也是乙個運算子

3. 動態繫結機制

方法呼叫與方法所在的類關聯起來稱為繫結

######## 動態多型

######## 1.給的是父類引用

######## 2.因為父類引用只能看見父類的部分,所以這個方法一定要定義在父類身上,然後子類重寫

######## 動態繫結技術

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

通過動態繫結和重寫機制實現多型

1. 多型引數

2. 異構集合

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

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

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

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

編寫類時,通常會在類中定義一些方法,面熟該類所具有的行為。在類的方法中,編寫**實現該類所執行的行為。

在方法修飾符部分書寫abstract修飾符,方法不能有實現部分沒有{}方法的引數列表後用;結束

public abstract class 類名{}

public abstract void 方法名();

父類的某些方法只能確定方法的宣告,即子類相同方法有什麼名字,引數返回型別,訪問修飾符,但是不能確定方法的具體實現,所有方法的具體實現由子類重寫

抽象類 包括了子類中共有的屬性和方法

實現類 實現父類的屬性和方法

抽象方法 方法的宣告有引數列表但是什麼都不做

實現方法    通過對抽象方法的重寫實現具體功能

有抽象方法一定有抽象類

有抽象類不一定有抽象方法

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

抽象是可以通過繼承傳遞的

如果子類只實現了父類的部分抽象方法則子類仍具有抽象方法,這個子類也必須是抽象類

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

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

父類的某些方法,只能確定方法宣告不能確定方法的實現

在編譯期強制要求子類的實現方法必須重寫來自父類的方法

抽象類只是不能產生物件

不影響其他內容,類中的屬性,行為,構造,初始化塊都可以有

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

與子類的關係還是is-a的關係

將乙個抽象方法放在父類中,可以強制任何子類實現乙個特別的行為。繼承抽象方法的子類如果想要例項化物件,必須重寫該方法

多型和抽象

多型就是指 相同的行為不同的實現 特指方法 理解多型 1.靜態多型 編譯期,系統就能決定呼叫哪個方法 通過過載實現 2.動態多型 執行期,系統才能確定動態方法所指的物件 使用動態繫結和重寫實現 注 多型中大量用到動態多型。多型的技術基礎 1.向上轉型技術 子轉父 用到動態繫結技術 執行時根據父類引用...

多型和抽象

經過一天的學習我們需要掌握以下幾點。一 什麼是多型。乙個物件有多種形式的能力乙個類的子類可以定義他們唯一的行動,同時共享父類的某次寫相同特徵。二 了解多型之前需要了解幾個繼承技術。1向上轉型技術 2instaceof關鍵字 3動態繫結技術。三 動態繫結。將乙個方法呼叫與該方法所在的類關聯起立。四 什...

抽象和多型

一 抽象 1.概述 將功能定義抽象,那麼該類就是抽象類 2.特點 乙個類中可以抽象方法.也可以有非抽象方法 3.格式 public abstract void method 4.抽象類的子類特點 子類可以是抽象類,沒有任何意義.抽象類不能直接例項化,就不能使用呼叫方法 子類是非抽象類,必須要重寫父類...