Java基礎10 介面的繼承與抽象類
在 實施介面中,我們利用interface語法,將interface從類定義中獨立出來,構成一個主體。interface為類提供了 介面規範。
在 繼承中,我們為了提高程式的可複用性,引入的繼承機制。當時的繼承是基於類的。interface介面同樣可以繼承,以擴充原interface。
介面繼承
介面繼承(inheritance)與類繼承很類似,就是以被繼承的interface為基礎,增添新增的介面方法原型。比如,我們以Cup作為原interface:
interface Cup { void addWater(int w); void drinkWater(int w); }
我們在繼承Cup的基礎上,定義一個新的
有刻度的杯子
的介面,MetricCup
介面如下:
interface MetricCup extends Cup { int WaterContent(); }
我們增添了一個新的方法原型WaterContent(),這個方法返回一個整數(水量)。
interface的多重繼承
在Java類的繼承中, 一個衍生類只能有一個基類。也就是說,一個類不能同時繼承多於一個的類。在Java中,interface可以同時繼承多於一個interface,這叫做 多重繼承(multiple inheritance)。
比如我們有下面一個Player介面:
interface Player { void play(); }
我們新增一個MusicCup的介面。它既有Cup介面,又有Player介面,並增加一個display()方法原型。
interface MusicCup extends Cup, Player { void display(); }
(如何使用interface,見 實施介面)
抽象類
在生活中,我們會有一些很抽象的概念。這些抽象的概念往往是許多類的集合,比如:
- 糧食 (可以是玉米、小麥、大米)
- 圖形 (可以是三角形、圓形、正方形)
再比如,我們之前舉出了例子:
- 人類 (可以是男人、女人)
在組織這樣的關係時,我們可以 使用繼承,比如:
根據我們的常識:
- "Food類的物件"的說法是抽象的。這樣一個物件應該是屬於Corn, Rice, Wheat子類中的一個。
- Food類有 eat()方法 (食物可以吃)。然而,這樣的一個動作是抽象的。糧食的具體吃法是不同的。比如Corn需要剝皮吃,Wheat要磨成麵粉吃。我們需要在每個類中覆蓋Food類的eat()方法。
抽象與具體
Java中提供了 抽象類(abstract class)的語法,用於說明類及其方法的 抽象性。比如:
abstract
class
Food {
public
abstract
void
eat();
public void happyFood();
{
System.out.println("Good! Eat Me!");
}
}
類中的方法可以宣告為 abstract,比如上面的 eat()。這時,我們不需要具體定義方法,只需要提供該方法的原型。這與介面類似。當我們在比如Corn類中繼承該類時,需要提供 eat()方法的具體定義。
類中的另一個方法happyFood()並不是
當一個類中出現abstract方法時,這個類的宣告必須加上abstract關鍵字,否則Java將報錯。一個abstract類不能用於建立物件。
抽象類的繼承
我們可以像繼承類那樣繼承一個抽象類。我們必須用完整的方法定義,來覆蓋抽象類中的抽象方法,否則,衍生類依然是一個抽象類。
抽象類的定義中可以有資料成員。資料成員的繼承與正常類的繼承相同。
總結
interface繼承,多重繼承
abstract method, abstract類
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2664315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript基礎: 類與繼承JavaScript繼承
- Java之繼承和抽象類Java繼承抽象
- JAVA介面繼承、抽象類等Java繼承抽象
- 第二十八節:Java基礎-進階繼承,抽象類,介面Java繼承抽象
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- Java:類與繼承Java繼承
- 繼承+多型+抽象類繼承多型抽象
- C#虛基類繼承與介面的區別C#繼承
- 繼承 基類與派生類繼承
- Java的類與繼承Java繼承
- PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- 繼承 重寫和抽象類繼承抽象
- 【Java】繼承、抽象、組合Java繼承抽象
- java抽象繼承-模板方法Java抽象繼承
- [打牢基礎系列]JavaScript的類與繼承JavaScript繼承
- c# abstract抽象類及抽象方法_繼承C#抽象繼承
- java繼承基礎詳解Java繼承
- java 繼承的基礎(轉)Java繼承
- 菱形繼承與虛基類繼承
- Java抽象類與介面的區別Java抽象
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- 類的繼承,介面的使用繼承
- JAVA類的頂層Type抽象和繼承關係Java抽象繼承
- Java中抽象類與介面的區別Java抽象
- Java基礎-抽象類和介面Java抽象
- javascript基礎-原型鏈與繼承JavaScript原型繼承
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- java抽象類與介面的詳細詮釋Java抽象
- Java中的類繼承與多型Java繼承多型
- c# abstract抽象類與繼承類子類的建構函式_baseC#抽象繼承函式
- Java基礎 成員變數的繼承與覆蓋Java變數繼承
- 6-2 抽象類的繼承 (5分)抽象繼承
- Java基礎之介面與抽象類及多型、內部類Java抽象多型
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- 關於Java中的物件、類、抽象類、介面、繼承之間的聯絡Java物件抽象繼承
- Java基礎之淺談繼承、多型Java繼承多型
- Java抽象類、繼承及多型和介面卡的實現Java抽象繼承多型