關於介面的實現和繼承的問題

2021-07-11 06:07:14 字數 641 閱讀 7267

inte***ce inte***ce1

用乙個類去實現這個介面:

public class class1 : inte***ce1

}現在,class1實現了介面inte***ce1,當類class1的乙個子類class2繼承class1時,子類class2自然就可以訪問helloworld()方法了。問題就出在這裡,其實我們不希望子類class2去繼承類class1中實現介面的部分。這該怎麼辦呢?

當時我們都沒能夠給出回答,我自己還認為這個問題是不可能實現的。現在看來我又錯了。今天在qq群中,有乙個朋友再次提出了這個問題,並且提供了一些方法。我根據他的提示,很輕鬆的就解決了這個問題。其實答案很簡單,只需要在類class1中顯示的實現介面就可以了。具體定義如下:

class class1 : inte***ce1

}這樣定義以後,方法helloworld就不再是乙個public的方法了。甚至他的屬性比私有更嚴格,連class1本身都不能夠進行訪問。如果需要對方法helloworld進行訪問,需要定義乙個inte***ce1的引用,使它指向class1的例項。通過這個引用就可以訪問了。

另外通過這種方法來實現的時候,class1的子類也都擁有了這個方法,只是不能被訪問,如果使inte***ce1的引用指向class1 的子類的引用也同樣可以訪問該方法。

關於繼承和介面的區別

當使用繼承的時候,主要是為了不必重新開發,並且在不必了解實現細節的情況下擁有了父類我所需要的特徵。但是很多時候,乙個子類並不需要父類的所有特徵,它可能只是需要其中的某些特徵,但是由於通過繼承,父類所有的特徵都有了,需要的和不需要的特徵同時具備了。而那些子類實際上不需要用到的,有時候甚至是極力避免使用...

實現介面的類是否繼承介面實現的問題

在類 a中實現了某些介面,以後在繼承類 a時也會一起繼承所有介面的實現,而不需要在繼承類中顯式地進行介面的實現。除非在繼承類中想要改變父類的介面實現。具體的 如下所示 using system using system.collections.generic using system.linq us...

類的繼承和介面的實現

首先是乙個 在控制台列印順序的問題,第一步要看的是從子類中找到new 例項化 首先在例項化子類的物件的時候已經例項化了父類的物件所以是從要首先呼叫 呼叫父類的物件,無論子類的new 裡面有沒有引數都是從父類開始呼叫 父類的開始的呼叫無參的方法 執行完畢後呼叫子類的方法 子類的方法要看子類中對應的引數...