java中的多型 抽象類 介面

2021-09-24 18:48:49 字數 2803 閱讀 9951

概述:某乙個事物,在不同時刻表現出來的不同狀態

舉例:

cat c=new cat();

animal a=new cat();

貓可以是貓的型別。貓 m = new 貓();

同時貓也是動物的一種,也可以把貓稱為動物。動物 d = new 貓();

a:要有繼承關係

b:要有方法重寫,如果沒有就沒有意義

c:要有父類引用指向子類物件

案例

public class mytest 

}class animal

public void sleep()

public void show()

}class cat extends animal

@override

public void sleep() }

a:成員變數

編譯看左邊,執行看左邊

b:構造方法

建立子類物件的時候,會訪問父類的構造方法,對父類的資料進行初始化

c:成員方法

編譯看左邊,執行看右邊

d:靜態方法

編譯看左邊,執行看左邊(靜態和類相關,算不上重寫,所以,訪問還是左邊的)

class demo 

}class base

}class subclass extends base

}

提高了**的維護性(繼承保證)

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

多型的弊端以及多型中向上轉型和向下轉型

不能使用子類特有的功能,如果要使用,需要父類的引用強制轉換為子類的引用

//描述動物類,並抽取共性eat方法

abstract class animal

// 描述狗類,繼承動物類,重寫eat方法,增加lookhome方法

class dog extends animal

void lookhome()

}// 描述貓類,繼承動物類,重寫eat方法,增加catchmouse方法

class cat extends animal

void catchmouse() }public class test

}

概述

方法功能宣告相同,但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是乙個抽象方法

定義格式

抽象類格式: abstract class 類名 {}

抽象方法格式: public abstract void eat();

抽象類特點

抽象類和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類中

抽象類不可以直接建立物件,原因:呼叫抽象方法沒有意義

只有覆蓋了抽象類中所有的抽象方法後,其子類才可以建立物件。否則該子類還是乙個抽象類

abstract不能和哪些關鍵字共存?

private 被私有的成員只能在本類中呼叫,而abstract強制重寫抽象方法,二者衝突

final final表示最終的,被修飾的類和方法不能被繼承和重寫,與abstract強制重寫抽象方法衝突

static 無意義

概述介面是額外功能的集合,同樣可看做是一種資料型別,是比抽象類更為抽象的」類」。介面只描述所應該具備的方法,並沒有具體實現

定義格式

public inte***ce 介面名 

類實現介面

class 類 implements 介面

在類實現介面後,該類就會將介面中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯,可以多實現

inte***ce fu1

inte***ce fu2

inte***ce fu3

inte***ce zi extends fu1,fu2,fu3

介面的子類

a:可以是抽象類。但是意義不大。

b:可以是具體類。要重寫介面中的所有抽象方法。(推薦)

介面的成員特點成員變數:只能是常量,並且是靜態的,預設有public static final修飾

成員方法:只能是抽象方法,預設有public abstract修飾

構造方法:介面沒有構造方法

案例inte***ce demo //定義子類去覆蓋介面中的方法。類與介面之間的關係是 實現。通過 關鍵字 implements

class demoimpl implements demo

public void show2(){}

}類與類:繼承關係,只能單繼承,可以多層繼承

類與介面:實現關係,可以單實現,也可以多實現。並且可以在繼承乙個類的同時實現多個介面

介面與介面:繼承關係,可以單繼承,也可以多繼承

五、抽象類和介面的區別

成員區別

抽象類:

成員變數:可以是變數,也可以是常量

成員方法:可以死抽象類,也可以非抽象類

構造方法:有

介面:

成員變數:只能是常量

成員方法:只能是抽象類

構造方法:無

抽象方法:

類與類:繼承,單繼承

類與介面:實現,單實現,多實現

介面與介面:繼承,單繼承,多繼承

設計理念區別

抽象類:體現的是「is a 」的關係,抽象類中定義的是該繼承體系的共性功能

介面:體現的是「like a 」的關係,介面中定義的是該繼承體系的個性功能(擴充套件功能)

多型 抽象類 介面

抽象類介面 什麼是多型?同乙個物件,在不同時刻表現出來的不同形態 1.有繼承 實現的前提 2.有方法的重寫 3.有父類引用指向子類物件 例 animal a new cat 成員變數訪問 父類中有的屬性,才能正常編譯 編譯看左邊 如子類也有相同屬性,訪問執行出來的是父類中的屬性值 成員方法訪問 父類...

多型 抽象類 介面

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

多型 抽象類 介面

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