Wikipedia na problemie diamentowe:Diament Problem
”... problem diament jest wieloznaczność, która powstaje, gdy dwie klasy B i C dziedziczą z A i klasy D dziedziczy zarówno B i C. Jeśli metoda w D wywołuje metodę zdefiniowaną w A (i nie zastępuje metody), a B i C nadpisały tę metodę w inny sposób, a następnie od której klasy dziedziczy ona: B lub C? "
Więc diament wygląda następująco:
A
/\
B C
\/
D
Moje pytanie brzmi, co się stanie, jeśli nie ma takiej klasy A, ale znowu B i C deklaruje sam sposób, powiedzmy foo(). Czy to nie jest ten sam problem? Dlaczego nazywa się to problemem diamentowym?
przykład:
class B {
public void foo() {...}
}
class C {
public void foo() {...}
}
class D extends B, C {
}
new D().foo();
o jaki język pytasz? –
@Neil Butterworth język nie powinno mieć znaczenia w tym, ponieważ jest to bardziej problem koncepcji. Języki takie jak C++ pozwalają na to, ale Java i C# nie. –
I właśnie dlatego "wielokrotne dziedziczenie" jest brudnym słowem ... – Danail