維基百科上的金剛石問題:鑽石問題
」 ...金剛石的問題是,當出現兩個類B和C從A繼承歧義,和類d來自B和C,如果一個方法繼承在D中調用A中定義的方法(並且不覆蓋該方法),並且B和C以不同的方式重寫該方法,那麼它從哪個類繼承:B或C?「
所以鑽石看起來是這樣的:
A
/\
B C
\/
D
我的問題是,如果沒有這樣的A級會發生什麼,但同樣B和C聲明相同的方法,說FOO()。這不是同一個問題嗎?爲什麼它被稱爲鑽石問題?
實施例:
class B {
public void foo() {...}
}
class C {
public void foo() {...}
}
class D extends B, C {
}
new D().foo();
你問什麼語言? – 2010-01-14 14:49:18
@Neil Butterworth語言不應該在這個問題上,因爲這更多的是一個概念問題。像C++這樣的語言允許這樣做,但Java和C#不支持。 – 2010-01-14 14:50:11
這就是爲什麼「多重繼承」是一個髒話...... – Danail 2010-01-14 15:01:15