(抽象)類和介面細節分析

2021-07-06 08:08:05 字數 1592 閱讀 7221

抽象類是否可繼承介面?

抽象類裡面可以包括抽象方法和非抽象方法,而介面只是定義了方法的原型,沒有方法的具體定義。從這方面來分析,抽象類是可以繼承介面的。

抽象類繼承介面後,一定要實現介面中的成員方法麼?

答案是否定的。

抽象類繼承介面後,可以實現介面中的成員方法,也可以不實現。如果不實現介面中成員方法,只需將該方法宣告為abstract型別就可以了。

inte***ce itemp

abstract class ctemp : itemp

(抽象)類繼承類和介面的順序是如何的?

class a

inte***ce ia

inte***ce ib

能否像下面一樣定義乙個類?

class b : ia, ib, a

答案是不可以。編譯器會告訴你:基類a必須在任何介面之前。

所以應該寫成:

class b : a, ia, ib

這是為什麼呢?

下面是一家之言,僅供參考,不能保證所說的正確性。如果有誤,敬請斧正。

針對上面的例子,假設類a中有乙個方法時m,介面ia中同時宣告了乙個方法m。如果類b是按照ia, ib, a這樣的順序繼承,則在b型別執行記憶體分配時,b物件的方法表裡面首先載入介面ia中的方法的實現,之後是ib的,再之後是a的。因為a中也有方法m,所以這樣的順序是不是會認為m是ia中成員m的實現呢?如果類b是按照a, ia, ib這樣的順序繼承,就不存在這樣的情況了。

介面可以繼承抽象類麼?

介面只定義成員方法的原型,並不包括成員方法的實現。抽象類裡面可能有實現的方法。如果說,介面可以繼承抽象類,那這就和「介面只宣告成員方法的原型,而沒有具體方法的定義」相違背。

所以說,介面不能繼承抽象類。

介面中可以包含屬性和事件,但是不可以包含字段。

屬性和事件在編譯的時候編譯器會自動將其轉化成方法。

介面中不能再宣告型別。例如介面中不能再定義類,不能再宣告介面等等,但是類裡面可以再定義類,再宣告介面。

例如下面是合理的:

class n

class cu }而

inte***ce ib

class cu }或者

inte***ce ib

}是通不過編譯的。

類如何做到隱藏介面中的實現方法?

如果乙個類實現了乙個介面中的方法m,則m應該宣告為public,否則編譯無法通過。但是如何讓類的引用無法使用介面中的方法m呢?例如

看上圖,你會發現物件a的方法列表中並沒有方法m。如何做到呢?

是的,通過介面名稱限定類中實現的介面中的方法。

像上面那樣,如何訪問到m呢?通過介面型別的引用訪問即可,例如ia a = new ca();。

再討論這樣做是否有意義?

介面是為不相關的類提供通用的功能的,像上面,如果m對類ca的引用是隱藏的,我們完全可以將m這樣的方法脫離出來再定義乙個介面就哦可了。所以照這樣說,上面那種做法是沒有必要的。

介面和抽象類

介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...

抽象類和介面

抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...

抽象類和介面

1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...