top抽象類、介面和內部類(上)
由abstract修飾的方法為抽象方法,抽象方法即只有方法的定義,沒有方法體實現,用乙個分號結尾。即方法五要素中,抽象方法缺少了乙個要素(即:方法體)。也可以將抽象方法理解為不完整的方法。
若將抽象方法包含在類中,則該類也應該為抽象的,可以理解為,該類也不完整。抽象類由abstract關鍵字宣告。
抽象類是不能例項化物件的,而乙個類不能例項化是沒有意義的,所以,需要定義類來繼承抽象類,而如果乙個類繼承了抽象類,則其必須重寫其抽象方法(變不完整為完整),除非該類也宣告為抽象類。看下面的**,定義了抽象方法和抽象類:
copytext
pop-up
abstract
class
shape
public
abstract
double
area
();}
abstract class shape通過上面的**可以看到,area()方法沒有方法體(連大括號也不存在),由abstract修飾,此為抽象方法。而shape方法也由abstract修飾,即為抽象類。public abstract double area();
}
抽象類不可以例項化,若shape是抽象類的話,下面的**是錯誤的:
copytext
pop-up
shape
s1 =
newshape
();
shape s1 = new shape();即使乙個類中沒有抽象方法,也可以將其定義為抽象類,同樣,該類不可以例項化。
需要注意一點:abstract和final關鍵字不可以同時用於修飾乙個類,因為final關鍵字使得類不可繼承,而abstract修飾的類如果不可以繼承將沒有任何意義。兩者放在一起,會起衝突。
乙個類繼承抽象類後,必須實現其抽象方法,不同的子類可以有不同的實現。看下面的**,square類與circle類都繼承自shape類,並分別實現了重寫的area()方法,只是其具體實現的**不同:
copytext
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()
}
看如下的**:
copytext
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關鍵字」實現」介面。乙個類實現了某個介面後必須實現該介面中定義的所有方法。看下面的**,類實現了介面並實現了方法:
copytext
pop-up
class
americancurl
implements runner , …
}
class americancurl implements runner , …另外需要說明的一點,介面可以作為一種型別宣告變數,乙個介面型別的變數可以引用實現了該介面的類的物件;通過該變數可以呼叫該介面中定義的方法(具體的實現類提供了方法的實現)。**如下所示:}
copytext
pop-up
runner
runner =
newamericancurl
();
runner runner = new americancurl();此句**為,乙個介面型別變數,引用了子類的物件。呼叫時,呼叫的是子類物件的具體的實現。
介面間可以存在繼承關係,乙個介面可以通過extends關鍵字繼承另外乙個介面。子介面繼承了父介面中定義的所有方法。**如下所示:
copytext
pop-up
inte***ce
runner
inte***ce
hunter
extends runner
class
americancurl
implements hunter
public
void
hunt()}
inte***ce runner說明:americancurl實現了hunter,必須實現hunter介面中的hunt方法以及其父介面runner中的run方法。inte***ce hunter extends runner
class americancurl implements hunter
public void hunt()
}
從圖1中可以看出,達內職員類為抽象類,企業技術顧問、技術圖書作者為兩個介面。達內講師類繼承了抽象類達內職員,並實現了企業技術顧問和技術圖書作者兩個介面。而達內專案經理只繼承了抽象類達內職員。通過分析,可以總結出如下幾點抽象類和介面的區別:
內部類,抽象類和介面
abstract普通類繼承抽象類要把抽象類中的所有抽象方法都覆蓋,抽象類繼承抽象類不用。抽象類不能被建立物件。普通類不能有抽象方法,抽象類可以有普通方法。建立了抽象父類的物件new後面是子類物件是可以實現的。implements用來繼承介面,inte ce介面中不存在具體的方法,介面中只存在抽象方法...
抽象類 介面和內部類
1.1 使用抽象類 1.1.1.抽象方法和抽象類 由abstract修飾的方法為抽象方法,抽象方法即只有方法的定義,沒有方法體實現,用乙個分號結尾。即方法五要素中,抽象方法缺少了乙個要素 即 方法體 也可以將抽象方法理解為不完整的方法。若將抽象方法包含在類中,則該類也應該為抽象的,可以理解為,該類也...
抽象類,介面和內部類
類中有抽象函式的類就被稱為抽象類。模糊不清的類 不具體的類 abstract class animal注意點 抽象類能否建立物件?不能 物件本身是乙個具體的東西 而抽象類中含有不具體的內容 抽象類必須作為父類存在嗎?必須 抽象類就等著被繼承呢!抽象類和一般類有什麼區別?就是一般類的特殊情況 唯一的區...