2011-06-28 53 views
2

從另一個類繼承的類和它的子類之間有任何技術差異嗎? 什麼是A和B之間在下面的代碼差:在子類和繼承類之間是否有任何技術區別?

A)

public class foo { 
... 
private class bar {...} 
} 

B)

public class foo { ...} 

private class bar extends foo {...} 
+0

C#的問題,但更好的答案在這裏http://stackoverflow.com/questions/7544882/inheritance-nestedclasses-in-c-sharp – nawfal

回答

2

在繼承的情況下,你可以把派生類像它的基類。也就是說,你可以保持基類引用的集合並調用它們的方法,而不需要知道實際對象是否具有任何派生類型,如果是的話。這是一個重要的語義概念。

在成員類的情況下,內部類僅僅是外部類的實現細節,甚至對消費者來說也是不可見的。即使它是可見的,它也只是foo類的一個特徵。你可以看到這兩種情況在語義上有很大不同,你必須選擇最能準確表示你的實際數據模型的那種。

技術上,由於各種虛函數調用,派生類可能重一點點,但細節取決於您的語言和具體情況。

0

當使用B)欄也是FOO。它繼承了foo的所有成員變量和方法。 在A)bar只能訪問foo的方法,但它本身沒有它們。那不是那麼美好。

10

您在混合使用條款。子類與繼承類相同。

在實施例A中,bar內部類別。內部類就像嵌套類型。 bar可以從foo看到所有私人資料,但它本身不是foo(您不能將bar轉換爲foo)。

+0

這也是正確的。 –

0

在A)class bar中是而不是從foo類繼承而來。

在B)類吧的一個子類,或者是一個foo的繼承類。子類和繼承類是同義詞。

相關問題