從另一個類繼承的類和它的子類之間有任何技術差異嗎? 什麼是A和B之間在下面的代碼差:在子類和繼承類之間是否有任何技術區別?
A)
public class foo {
...
private class bar {...}
}
B)
public class foo { ...}
private class bar extends foo {...}
從另一個類繼承的類和它的子類之間有任何技術差異嗎? 什麼是A和B之間在下面的代碼差:在子類和繼承類之間是否有任何技術區別?
A)
public class foo {
...
private class bar {...}
}
B)
public class foo { ...}
private class bar extends foo {...}
在繼承的情況下,你可以把派生類像它的基類。也就是說,你可以保持基類引用的集合並調用它們的方法,而不需要知道實際對象是否具有任何派生類型,如果是的話。這是一個重要的語義概念。
在成員類的情況下,內部類僅僅是外部類的實現細節,甚至對消費者來說也是不可見的。即使它是可見的,它也只是foo
類的一個特徵。你可以看到這兩種情況在語義上有很大不同,你必須選擇最能準確表示你的實際數據模型的那種。
技術上,由於各種虛函數調用,派生類可能重一點點,但細節取決於您的語言和具體情況。
當使用B)欄也是FOO。它繼承了foo的所有成員變量和方法。 在A)bar只能訪問foo的方法,但它本身沒有它們。那不是那麼美好。
在你的例子A)bar
不是「子類」 - 它是一個嵌套類。
看到這個問題要問什麼嵌套類的更多信息被用於:Why Would I Ever Need to Use C# Nested Classes
您在混合使用條款。子類與繼承類相同。
在實施例A中,bar
是內部類別。內部類就像嵌套類型。 bar
可以從foo
看到所有私人資料,但它本身不是foo
(您不能將bar
轉換爲foo
)。
這也是正確的。 –
在A)class bar中是而不是從foo類繼承而來。
在B)類吧是的一個子類,或者是一個foo的繼承類。子類和繼承類是同義詞。
C#的問題,但更好的答案在這裏http://stackoverflow.com/questions/7544882/inheritance-nestedclasses-in-c-sharp – nawfal