1. 程式人生 > >關於介面能否繼承介面,抽象類是否…

關於介面能否繼承介面,抽象類是否…

首先我們先來了解兩個名詞:介面、抽象類、具體類。
介面:[interface]∶兩個不同系統(或子程式)交接並通過它彼此作用的部分。
抽象類:抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是 本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象類。在C++中,含有 純虛擬函式的類稱為抽象類,它不能生成物件;在java中,含有抽象方法的類稱為抽象類,同樣不 能生成物件。
具體類:與抽象類相反。
接下來是三者之間的關聯與區別:
抽象類與具體類比較:
1.抽象類不能直接例項化,並且對抽象類使用 new 運算子會導致編譯時錯誤。雖然一些變數和值在編譯時的
型別可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的例項的引用(此非抽象類是從抽象類派生的)。
2.允許(但不要求)抽象類包含抽象成員。
3.抽象類不能被密封。
抽象類與介面比較:
抽象類表示該類中可能已經有一些方法的具體定義,但是介面就僅僅只能定義各個方法的介面(方法名,引數列表,返回型別),並不關心具體細節。
介面是引用型別的,和抽象類的相似之處有三點:
1.不能例項化;
2.包含未實現的方法宣告;
3.派生類必須實現未實現的方法,抽象類是抽象方法,介面則是所有成員(不僅是方法包括其他成員)。
抽象類與介面緊密相關。然而介面又比抽象類更抽象,這主要體現在它們的差別上:
1.類可以實現無限個介面,但僅能從一個抽象(或任何其他型別)類繼承,從抽象類派生的類仍可實現介面,從而得出介面是用來解決
多重繼承問題的。
2.抽象類當中可以存在非抽象的方法,可介面不能,且它裡面的方法只是一個宣告必須用public來修飾沒有具體實現的方法。
3.抽象類中的成員變數可以被不同的修飾符來修飾,可介面中的成員變數預設的都是靜態常量(static final)。
4.抽象類是物件的抽象,然而介面是一種行為規範。
根據以上的對比與理解得出結論:

相關推薦

關於介面能否繼承介面抽象是否…

首先我們先來了解兩個名詞:介面、抽象類、具體類。介面:[interface]∶兩個不同系統(或子程式)交接並通過它彼此作用的部分。抽象類:抽象類往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是 本質上相同的具體概念的抽象。通常在程式設計語句中用 abstract 修飾的類是抽象

ArrayList既然繼承自AbstractList抽象而AbstractList已經實現了List介面那麼ArrayList為何還要再實現List介面呢?

轉自: http://www.cnblogs.com/bluejavababy/p/4320545.html 首先請看下面這段程式碼: package example; import java.io.Serializable; import java.util.Ar

對java繼承多型抽象介面的理解

在java中,一切都是面向物件的。為了更為清晰的表示出兩個物件的關係,以及克服程式碼的冗餘,引入了繼承,多型,抽象類,介面等機制。我認為: 1.繼承是兩個物件間最為普遍也最容易表示的關係,同時繼承也很好的保持了父類物件的特性,使程式使用更為簡單易讀; 2.在多型中,用一個父

java 面向物件面試題問答題構造方法抽象繼承多型介面異常總結;

一,構造方法的特點 面向物件的思想是如何在java展現的呢? 就是通過類和物件 類是一組相關的屬性和行為的集合。是一個抽象的概念。 物件是該類事物的具體表現形式。具體存在的個體。 一、抽象類的抽象方法的特點是什麼? 被abstract修飾的類稱為抽象類 特點: 1、抽象類不能有物件(不能用new關鍵字來例項化

JAVA——介面抽象抽象問題

ps 這部分真的是難理解,學生能力有限,花費小三天的時間才初步理解了一些,如有錯誤之處,還請讀者指出,望海涵。 抽象類 特點:(使用abstract修飾) 不能建立例項(不能new一個抽象類) 類中如果包含的方法可為抽象方法也可為普通方法(留給子類) 抽象類都

python介面抽象

# 支付方式不夠統一 class QQpay: def pay(self, money): print('QQ支付了%s錢' % money) class Alipay: def pay(self, money): print('支付寶支付

c# 介面抽象抽象方法的例項

用抽象方法和介面實現: 1 建立一個人的類包含屬性:姓名,年齡,性別,住址  對屬性進行封裝,自我介紹,吃的方法 2 建立一個男人的類繼承於人的類,建立一個獨有的特性:體重,對自我介紹的方法進行重寫(輸出:我是?,我來自於?,我的性別是?) 3 建立一個女人的類繼承於人的類

java 多型 抽象, 介面

1. 繼承 2. 重寫 3.父類引用指向子類物件 傳遞子類物件 當呼叫父類被重寫的方法時,實際new的是什麼子類物件就呼叫哪個子類物件的方法 執行期間,根據實際物件來呼叫,而不是父類引用。所以叫動態繫結,也叫多型 既然父類的方法註定要被重寫,那就沒有必要寫實現了,就可以將他定

Java介面抽象內部類

介面的概念     在Java中介面是一個全部由抽象方法組成的集合,介面需要用interface定義,裡面只能有抽象的方法和常量。 介面體現的是事物擴充套件的功能,在Java中,類定義了一個實體,包括實體的屬性,實體的行為。而介面定義了一個實體可能發生的動作,只有一個宣告,

JAVA零碎(四)介面抽象

抽象類: 抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類,抽象方法必須是publiic 或 protected 子類繼承抽象類時,必須實現所有的抽象方法,不然子類也得宣告為抽象類 介面: 介面中只能由抽象方法和最終變數,變數預設為public static fi

Java~抽象介面

最近有空就著迷於java的世界,希望可以把自己的lind重構一個java版本出來,雖然遇到一些小問題,但也都解決了,還是那句話,知識需要積累,程式設計師需要一個追求! 類 抽象類 介面 泛型類 泛型介面 非泛型類繼承泛型類後,輸出泛型的名稱 一 類,與C#類似,只是去除了屬性的概念,由方

return抽象介面物件序列化機制this和super識別符號break和continue以及returnfinal,finally和finalize

               (2)介面中定義的成員變數預設為public static final,只能夠有靜態的不能被修改的資料成員,而且,必須給其賦初值,其所有的成員變數只能被public,abstract這兩個關鍵字修飾。抽象類可以有自己的成員變數,還可以有非抽象的成員方法,抽象類的成員變數預設為de

介面抽象異常

1.抽象類 抽象類:包含一個抽象方法的類稱為抽象類 抽象方法:只宣告而未實現的方法稱為抽象方法,使用abstrat 關鍵字宣告該方法 abstract class 抽象類名{ 屬性 方法

java介面抽象的區別什麼時候該用介面什麼時候該用抽象

相信大家在面試過程中都會被問到這個問題,語法上的區別大家都知道,但是如果面試時你只說語法上的區別估計面試官會在心裡扣你兩分。 下面說說我在使用過程中關於這兩者在設計方面的區別的一些理解: 介面大家比較熟悉一點,因為現在的MVC架構業務層規範就是先寫介面再寫實現類,介面設計的目

c的回撥函式與java中抽象函式介面函式抽象簡單理解

先了解c語言的回撥函式,舉個簡單例項步步深入,比如A程式提供給B程式使用,但是A想要呼叫B的程式碼,這樣各自不同功能由B實現即可。 例項1A: extern int get_B_data(); void A_data_handle(){ printf("%d\n",get

(class)抽象(abstract) 介面(interface)的關係和區別

抽象類: 抽象類不能被例項化 抽象類可以不包含抽象類, 但是有抽象類的方法一定是抽象類 任何子類必須重寫父類的抽象方法, 或者自己也是抽象類 抽象類中的抽象方法只是宣告,不包含

C#多型的虛方法介面抽象的個人總結

C#的虛擬函式是可以有實現的,且子類可以不實現父類的虛方法,抽象類和抽象方法是沒有具體實現的,子類必須實現父類的抽象方法(子類是抽象類,可以不用具體實現),介面,介面是在多個類之間沒有直接的關係,但需要共同合作時就需要使用到介面。

黑馬程式設計師- 動態代理 介面 抽象

包含抽象方法的類稱為抽象類,但並不意味著抽象類中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變數和普通的成員方法。注意,抽象類和普通類的主要有三點區別:   1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,

java繼承抽象

(1)繼承 擴充套件父類的功能 java中使用extends關鍵字完成繼承 class 子類 extends 父類{ } 限制:在java中只允許單繼承;子類不能直接訪問父類的私有成員,set和get方法訪問 (2)子類物件的例項化 1、在子類物件例項化之前,必須先

php介面(interface)跟抽象abstract的作用與好處

假設現在有六個類 動物(Animal)抽象類 老虎(tiger) 繼承動物類 蛇類(snake) 繼承動物類 兔子(rabbit) 繼承動物類 農夫(farmer)農夫可以餵養Animal 貼程式碼跟解釋 abstract class Animal{ //定