抽象類 介面和內部類(上)

2021-08-03 08:02:21 字數 3440 閱讀 4605

top抽象類、介面和內部類(上)

由abstract修飾的方法為抽象方法,抽象方法即只有方法的定義,沒有方法體實現,用乙個分號結尾。即方法五要素中,抽象方法缺少了乙個要素(即:方法體)。也可以將抽象方法理解為不完整的方法。

若將抽象方法包含在類中,則該類也應該為抽象的,可以理解為,該類也不完整。抽象類由abstract關鍵字宣告。

抽象類是不能例項化物件的,而乙個類不能例項化是沒有意義的,所以,需要定義類來繼承抽象類,而如果乙個類繼承了抽象類,則其必須重寫其抽象方法(變不完整為完整),除非該類也宣告為抽象類。看下面的**,定義了抽象方法和抽象類:

copy

text

pop-up

abstract

class

shape

public

abstract

double

area

();}

abstract class shape 

public abstract double area();

}

通過上面的**可以看到,area()方法沒有方法體(連大括號也不存在),由abstract修飾,此為抽象方法。而shape方法也由abstract修飾,即為抽象類。

抽象類不可以例項化,若shape是抽象類的話,下面的**是錯誤的:

copy

text

pop-up

shape

s1 =

newshape

();

shape s1 = new shape();
即使乙個類中沒有抽象方法,也可以將其定義為抽象類,同樣,該類不可以例項化。

需要注意一點:abstract和final關鍵字不可以同時用於修飾乙個類,因為final關鍵字使得類不可繼承,而abstract修飾的類如果不可以繼承將沒有任何意義。兩者放在一起,會起衝突。

乙個類繼承抽象類後,必須實現其抽象方法,不同的子類可以有不同的實現。看下面的**,square類與circle類都繼承自shape類,並分別實現了重寫的area()方法,只是其具體實現的**不同:

copy

text

pop-up

class

square

extends shape

public

double

area()}

class

circle

extends shape

public

double

area()}

class square extends shape 

public double area()

}class circle extends shape

public double area()

}

定義抽象類的意義在於:

看如下的**:

copy

text

pop-up

shape sarr =

;for

(int i=

0; i

shape sarr = ;

for(int i=0; i通過上面的**可以看出,以shape型別的引用訪問其子類,所有子類都會有area方法,只是其具體的實現各不一樣。

介面可以看成是特殊的抽象類。即只包含抽象方法和常量的抽象類。可以通過inte***ce關鍵字來定義介面。看如下**:

copy

text

pop-up

inte***ce

runner

inte***ce runner
注意,run()方法,此處可以省略public abstract。因其預設就是public abstract的。

與繼承不同,乙個類可以實現多個介面,實現的介面直接用逗號分隔。當然,該類需要實現這些介面中定義的所有方法;

乙個類可以通過implements關鍵字」實現」介面。乙個類實現了某個介面後必須實現該介面中定義的所有方法。看下面的**,類實現了介面並實現了方法:

copy

text

pop-up

class

americancurl

implements runner , …

}

class americancurl implements runner , …  

}

另外需要說明的一點,介面可以作為一種型別宣告變數,乙個介面型別的變數可以引用實現了該介面的類的物件;通過該變數可以呼叫該介面中定義的方法(具體的實現類提供了方法的實現)。**如下所示:

copy

text

pop-up

runner

runner =

newamericancurl

();

runner runner = new americancurl();
此句**為,乙個介面型別變數,引用了子類的物件。呼叫時,呼叫的是子類物件的具體的實現。

介面間可以存在繼承關係,乙個介面可以通過extends關鍵字繼承另外乙個介面。子介面繼承了父介面中定義的所有方法。**如下所示:

copy

text

pop-up

inte***ce

runner

inte***ce

hunter

extends runner

class

americancurl

implements hunter

public

void

hunt()}

inte***ce runner 

inte***ce hunter extends runner

class americancurl implements hunter

public void hunt()

}

說明:americancurl實現了hunter,必須實現hunter介面中的hunt方法以及其父介面runner中的run方法。

從圖1中可以看出,達內職員類為抽象類,企業技術顧問、技術圖書作者為兩個介面。達內講師類繼承了抽象類達內職員,並實現了企業技術顧問和技術圖書作者兩個介面。而達內專案經理只繼承了抽象類達內職員。通過分析,可以總結出如下幾點抽象類和介面的區別:

內部類,抽象類和介面

abstract普通類繼承抽象類要把抽象類中的所有抽象方法都覆蓋,抽象類繼承抽象類不用。抽象類不能被建立物件。普通類不能有抽象方法,抽象類可以有普通方法。建立了抽象父類的物件new後面是子類物件是可以實現的。implements用來繼承介面,inte ce介面中不存在具體的方法,介面中只存在抽象方法...

抽象類 介面和內部類

1.1 使用抽象類 1.1.1.抽象方法和抽象類 由abstract修飾的方法為抽象方法,抽象方法即只有方法的定義,沒有方法體實現,用乙個分號結尾。即方法五要素中,抽象方法缺少了乙個要素 即 方法體 也可以將抽象方法理解為不完整的方法。若將抽象方法包含在類中,則該類也應該為抽象的,可以理解為,該類也...

抽象類,介面和內部類

類中有抽象函式的類就被稱為抽象類。模糊不清的類 不具體的類 abstract class animal注意點 抽象類能否建立物件?不能 物件本身是乙個具體的東西 而抽象類中含有不具體的內容 抽象類必須作為父類存在嗎?必須 抽象類就等著被繼承呢!抽象類和一般類有什麼區別?就是一般類的特殊情況 唯一的區...