Java基礎之(二十一)介面與抽象類

2021-07-16 13:51:10 字數 1297 閱讀 4751

說明

類是物件的模板,抽象類和介面可以看做是具體的類的模板。

由於從某種角度講,介面是一種特殊的抽象類,它們的淵源頗深,有很大的相似之處,所以在選擇使用誰的問題上很容易迷糊。我們首先分析它們具有的相同點。

public

abstract

classa}

public

class

bextendsa}

public

class

cextends

a}

抽象類a有兩個子類b、c,由於a中有方法method2的實現(也就是普通方法),子類b、c中不需要重寫method2方法,我們就說a為子類提供了公共的功能,(因為子類繼承了父類,則也繼承了父類的方法)或a約束了子類的行為。method2就是**可重用的例子。a 並沒有定義 method1的實現(method1是抽象方法),也就是說b、c 可以根據自己的特點實現method1方法,這又體現了鬆散耦合的特性。

再換成介面看看:

public

inte***ce

apublic

class

bimplements

a public

void

method2()

}public

class

cimplements

a public

void

method2()

}

介面a無法為實現類b、c提供公共的功能,也就是說a無法約束b、c的行為。b、c可以自由地發揮自己的特點現實 method1和 method2方法,介面a毫無掌控能力。

inte***ce

ainte***ce

bclass

cimplements

a,bpublic

void method2()

}

可以如此靈活的使用c,並且c還有機會進行擴充套件,實現其他介面。

再看看抽象類:

abstract

class

aabstract

class

bextends

aclass

cextends

b public

void method2()

}

對於c類,將沒有機會繼承其他父類了。

綜上所述,介面和抽象類各有優缺點,在介面和抽象類的選擇上,必須遵守這樣乙個原則:

重拾java基礎(二十一) 反射總結

一 反射能幹什麼 1.使用jvm不讓呼叫的方法等二 什麼是反射 1.從記憶體中的位元組碼檔案中獲取相關的資訊 執行時 2.位元組碼檔案裡是類的資訊,例如屬性 構造方法 普通方法等 3.1是整數 9.8是小數 2.jpg是檔案 name是屬性 eat是方法 int是乙個型別 我們需要採用物件導向的思維...

Swift 學習之二十一 ?和 !(詳解)

swift語言使用var定義變數,但和別的語言不同,swift裡不會自動給變數賦初始值,也就是說變數不會有預設值,所以要求使用變數之前必須要對其初始化 如果在使用變數之前不進行初始化就會報錯 plain view plain copy print var stringvalue string err...

python基礎(二十一) 操作SQLite

python操作 使用內建模組sqlite3 游標cursor 引數化查詢 null 什麼都不存 integer 整型 real 親源型別 浮點型 text 包含文字 blob 二進位制大型物件,是乙個可以儲存大量資料的容器 增刪改查 select from 表名 insert into 表名 列1...