當前位置:編程學習大全網 - 編程語言 - 編程中關於類

編程中關於類

類之間的關系叫繼承(我這裏不討論組合)。而類和接口之間的關系叫實現。

類可以實現多個接口,但是只能繼承壹個類(這裏不討論C#以外的其他語言。)

父類(或基類)的成員如果標記為private,那麽只有該類本身可以訪問。

如果標記為protected,那麽其本身以及繼承了該類的類都可以訪問。public和internal我不討論。

如果該方法標記為virtual(虛方法),那麽繼承了該類的子類(或派生類)可以重寫這個方法“override”,這叫多態。如果沒有標記為virtual,那麽子類中同名的方法將覆蓋掉父類中的同名方法(默認情況下等同於在子類中使用new關鍵字)。這裏我並沒有完完全全的解釋,這是個初級程序員面試經常碰到的題。

如果說virtual的含義是允許子類重寫,那麽abstract修飾的方法就是說子類必須重寫。所以被abstract修飾的方法是沒有方法體的。只有方法的簽名(方法的返回值,方法名,方法的參數列表)。

如果壹個類中有方法聲明為abstract,那麽該類也必須聲明為abstract。而且該類型將不能直接實例化,但這並不是說該類型不允許寫構造函數。

終於說到接口(interface)了,從技術上說,如果壹個類全都是抽象方法,那麽它就是個接口了。但是這種表述非常隨意。嚴格的說,接口之所以可以被多重“繼承”,是因為接口事實上不是類的繼承層次,而是壹種契約。

比方說壹個人類(People),當它實現了Walkable接口的時候,它就可以走了,當它實現了Runable接口的時候,它就可以跑了,如果它實現了Flyable接口的時候,它甚至可以飛了(天使?鳥人?)。

在比方說,門(Door)這個類,當它實現了Lockable,他就是可以鎖住的門。如果他實現了Revolvable,那麽它是壹扇轉門。如果它實現了Slidable,那麽這是壹扇滑動門。

-----------------

糾正壹下樓上的壹些說法:

1.接口不是必須以I開頭。這只是壹種常見的命名規範。接口通常描述壹個行為。比如Lock/Unlock, Compare, Clone。所以很多接口以able結尾表述壹種能力。

2.子類繼承父類,擁有父類的字段和方法。

特例:private的成員;標記為sealed的方法。

還有壹樣東西,Attribute,這個要根據具體的Attribute是否允許被繼承而定。

3.接口是比抽象類更“純”的類,接口中不能包含字段。

接口不是類,但是更抽象。接口中不能包含字段(Field)、內部類(Nested Types)、委托(Delegate,但是可以包含事件)。所有的方法沒有方法體和訪問修飾符。

4.接口和類的關系是實現,不是繼承。

5.(派生類繼承抽象類時必須重寫基類的所有抽象方法。)

派生類繼承抽象類不必“重寫”所有抽象方法。因為該派生類如果也是個抽象類,那麽他很可能將這個類繼續抽象到下面去。

另外,接口是可以繼承的。

例子:IList繼承自ICollection,ICollection繼承自IEnumerable。

6.抽象類中含有虛方法。

抽象類和虛方法沒有什麽關系。含有抽象方法的類必須標記為抽象類。但是抽象類中也可能都是實體方法。

  • 上一篇:c語言如何編寫壹個簡單的多線程程序?
  • 下一篇:數控機床車刀的發展與保養~~,高分
  • copyright 2024編程學習大全網