多型 抽象類 介面

2021-10-02 04:15:10 字數 3042 閱讀 6718

抽象類介面

什麼是多型?

同乙個物件,在不同時刻表現出來的不同形態

1.有繼承/實現的前提

2.有方法的重寫

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

例:animal a=new cat();

⊙成員變數訪問

父類中有的屬性,才能正常編譯(編譯看左邊),如子類也有相同屬性,訪問執行出來的是父類中的屬性值

⊙成員方法訪問

父類中要有該方法,才能通過多型訪問,否則編譯報錯,若子類重寫該方法,通過多型形式訪問該方法執行出來的是子類中重寫的方法

總結就是:例:animal a=new cat();

…多型形式中,

…成員變數,編譯看左邊,執行看左邊

…成員方法:編譯看左邊,執行看右邊

1.好處

提高**的拓展性

體現在定義方法時,將父型別作為引數時,可以使用具體的子型別,則使用重寫的方法時,使用的是該子類重寫的方法,如圖

2.弊端

不能使用子類特有的功能

使用多型時,子類中特有的方法,只能通過向下轉型,進行訪問

(能解決多型的弊端)

1.向上轉型

父類引用指向子類物件

2.向下轉型

父類引用轉為子類物件,轉型的是父類引用所指向的那個子類物件

概述:

1.抽象方法:乙個沒有方法體的方法應該被定義為抽象方法

2.抽象類:乙個類中有抽象方法就被定義為抽象類

那麼為什麼要有抽象類呢?

當父類定義一些方法,不知道子類具體要怎麼操作時

1.必須使用abstract關鍵字修飾

包括抽象方法和類

2.抽象類中可以有抽象方法(可以沒有,但沒有意義),成員方法,成員變數

但是抽象方法的類一定是抽象類

3.抽象類不能例項化

…但是可以使用抽象類多型的形式例項化,即通過其子類進行例項化*

4.抽象類的子類:.要麼重寫抽象類中的方法,要麼是抽象類

1.除了有抽象方法,和一般類類似,也有構造方法

為什麼不能被例項化,要有構造方法?*

---------不能被初始化,用構造方法主要是用於子類訪問父類是,對父類資料初始化用的*

2.關於成員方法作用

有抽象方法:限定子類必須完成某些動作

有非抽象方法:為了提高**的復用性

最後,阻止物件被建立,可以有兩種方法:

1.定義該類為抽象類

2.將構造方法私有private(只能該類可以使用自己)

概述:

介面是一種公共規範標準,可以理解為附加的功能,本質是對行為的抽象

1.定義和實現

… a.使用關鍵字inte***ce定義

…b.使用關鍵字implements實現

2.不能被例項化

a.可以參照多型的形式例項化

b.多型的形式:具體類多型,抽象類多型,介面多型

c.多型的前提:

…1.有繼承/實現的關係

…2.有方法重寫

…3.有(父類/介面) .引用指向(子類/實現)物件

3.介面的實現類

a.要麼重寫介面中的方法

b.要麼是抽象類

1.只有常量,被public static final預設修飾

2.沒有構造方法

…實現類中能呼叫super()方法,不是呼叫介面中的構造的原因,而是,所有類直接或間接繼承自object

3.只能有抽象方法,預設被public abstract修飾

特別說明:這裡多實現,實現介面用逗號隔開,介面與介面之間可以實現多繼承關係

1.成員的區別

…介面中只有常量和抽象,沒有構造方法

2.關係區別

…類與類…繼承,單繼承

…類與介面…實現和多實現

…介面與介面…繼承和多繼承

本質:抽象類強調的是對事物的抽象,介面強調的是對行為的抽象

案例:

設計區別:

門的開關方法是抽象的概念 可以用抽象類,介面定義都可以

但是附加某種抽象的方法(比如給門加報警功能),不管附加在哪個(抽象類/介面)裡面,實現後繼承的類,都要在重寫該方法(新加的抽象方法)

所以最好的解決方法:

定義乙個介面(寫入附加的功能),再定義乙個抽象方法,誰要增加該功能就實現即可

多型 抽象類 介面

同一物件,在不同時刻表現出來的不同形態 多型的前提和實現 有繼承 實現關係 有方法重寫 有父類引用指向子類物件 多型中成員訪問特點 成員變數 編譯看左邊,執行看左邊 成員方法 便宜看左邊,執行看右邊 為什麼成員方法和成員變數的訪問不一樣呢?因為成員方法有重寫,而成員變數沒有 多型的好處和弊端 好處 ...

多型 抽象類 介面

1.多型的使用方式 父類引用指向子類物件 同一型別的物件引用指向了不同型別的子類物件,具體方法的實現不同 呼叫的方法需要是子類和父類都有的,但是執行的是子類的,就是執行醫生類覆蓋的 重寫的 eat方法 也就是所謂的 編譯看左邊,執行看右邊!能夠呼叫什麼方法,取決於引用的型別,而方法中具體怎麼執行,要...

多型,抽象方法,抽象類,介面

向上轉型 使用父類型別的變數接收子類型別的物件 多型使用的方法和屬性都是子類和父類共有的內容,物件能夠呼叫的屬性和方法全部 於子類中的內容。子類獨有的方法和屬性是不能使用的 向下轉型 如果向上轉型後,需要呼叫子類獨有的方法和屬性時,就需要向下轉型,必須是先有向上轉型,才會有向下轉型。一般用insta...