概念
抽象類必須使用abstract
class宣告
乙個抽象類中可以沒有抽象方法,抽象方法必須寫在抽象類或者介面中。
格式: abstract
class 類名
只宣告而未實現的方法為抽象方法(未實現指的是:沒有"{}"方法體),抽象方法必須使用abstract關鍵字宣告。
格式: abstact class 類名
在抽象類的使用中幾個原則:
抽象類本身是不能直接進行實列化操作的,即:不能直接使用關鍵字new完成。
乙個抽象類必須被子類所繼承,被繼承的子類(如果不是抽象類),則必須複寫(重寫)抽象類中的全部抽象方法。
1. 抽象類能否使用final宣告?
不能,因為final屬性的類式不能有子類的, 而抽象類必須有子類才有意義,所以不能。
2. 抽象類能否有構造方法?
能有構造方法,而且子類物件例項化的時候的流程與普通類的繼承式一樣的,都是要先呼叫父類中的構造方法(預設式無參的),之後再呼叫子類自己的構造方法。
1. 抽象類必須用public或protected修飾(如果為private修飾,那麼子類無法繼承,也就無法實現其抽象方法)
預設預設為 public
2. 抽象類不可以使用new關鍵字建立物件,但是在子類建立物件時,抽象父類也會被jvm例項化。
3. 如果乙個子類繼承抽象類,那麼必須實現其所有的抽象方法。如果有未實現的抽象方法,那麼子類也必須定義abstract類
如果乙個類中的全部方法都是抽象方法,全部屬性都是全域性常量,那麼此時就可以將這個類定義成乙個介面
inte***ce 介面名稱
這種思想是定義(規範,約束)與實現(名實分離的原則)的分離
優點:
1. 降低程式的耦合性;
2. 易於程式的擴充套件
3. 有利於程式的維護
因為介面本身都是由全域性常量和抽象方法組成,所以介面中的成員定義可以簡寫:
1. 全域性常量編寫時,可以省略public
static
final 關鍵字,例如:
public
static
final string info =
"內容"
; 簡寫後:
string info =
"內容"
;2. 抽象方法編寫時, 可以省略 public abstact 關鍵字 ,例如:
public
abstract
void
print()
; 簡寫後:
void
print()
;
介面的實現 implements
介面可以多實現:
格式:class 子類 implements 父介面1
,父介面2...
以上的**稱為介面的實現。那麼如果乙個類即要實現介面,又要繼承抽象類的話,則按照以下的格式編寫即可:
class 子類 extends 父類 implements 父類介面1
,父介面2...
.
介面因為都是抽象部分,不存在具體的實現,所以允許多繼承,例如:
inte***ce
cextends
a,b
如果乙個介面要想使用,必須依靠子類。子類(如果不是抽象類的話)
抽象類要被子類繼承,介面要被子類實現。
介面只能宣告抽象方法,抽象方法可以宣告抽象方法,也可以寫非抽象方法。
介面裡定義的變數只能是公共的靜態常量,抽象類中的變數是普通變數。
抽象類使用繼承類使用,無法多繼承。介面使用實現來使用,可以實現多繼承。
抽象類中可以包含static方法,但是介面中不用許(靜態方法不能被子類重寫,因此介面中不能宣告靜態方法)。
介面不能有構造方法,但是抽象類可以有。
介面和抽象類
介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...
抽象類和介面
抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...
抽象類和介面
1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...