Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program wielokrotnego dziedziczenia w Java

Ostatnio zmodyfikowano 2023-03-21 19:37
Autor Wiadomość
jamila2
Temat założony przez niniejszego użytkownika
Program wielokrotnego dziedziczenia w Java
» 2023-03-21 06:20:41
Według niektórych wpisów w książce Programming Languages ​​and Practice, dziedziczenie wielu interfejsów w Javie nie ma takich samych problemów jak dziedziczenie wielu klas w C++.
Ale nie jestem pewien, dlaczego tak się dzieje. Jak to się dzieje, że Java może wykorzystywać dziedziczenie wielu interfejsów, ale istnieją problemy z implementacją C++?
Czy istnieje sposób, aby zapobiec problemom z implementacją, zastępując wielokrotne dziedziczenie w C++?
Aby dokładniej określić końcowe stwierdzenie, rozważ:

class A {...};
class B : public A {...};
class C : public A {...};
class D : public B, public C {...};

Dlatego klasa D dziedziczy klasę B, która dziedziczy klasę C, która dziedziczy klasę A. Stąd, gdyby A miało zmienną polową, to B i C miałyby tę samą nazwę zmiennej, a D miałaby jaką zmienną (dziedziczoną po B lub C ). zgodnie z tym źródłem Czy możemy zaimplementować powyższy kod bez wielokrotnego dziedziczenia, ale z porównywalnymi efektami, aby temu zapobiec?
Pytanie nie jest duplikatem, ponieważ nie dotyczy tego, jakie ostatecznie będzie dziedziczenie w przykładzie, ale raczej zrozumienia różnicy między wielokrotnym dziedziczeniem Java-C++ (patrz pierwsze pytanie powyżej) i tego, czy istnieje sposób na przezwyciężenie niektórych problemy z wielokrotnym dziedziczeniem (jak powyżej).
P-180065
DejaVu
» 2023-03-21 10:01:48
Jeżeli potrzebujesz tak złożonego dziedziczenia to na 99% projektujesz swój kod źle. Skup się lepiej na poprawnym zaprojektowaniu aplikacji, a nie na dywagacjach teoretycznych 'dlaczego' są różnice w dziedziczeniu pomiędzy językami programowania. W Javie i w C# łatwiej rozwiązywać problemy techniczne, ponieważ masz poniekąd jeden kompilator. W C++ masz wiele implementacji kompilatorów rozwijanych przez różne grupy osób. Coś co jest 'well defined behavior' w C# czy Java to w C++ jest 'undefined behavior', bo np. architektura procesora nie wspiera natywnie jakiejś operacji, natomiast w Javie/C# taką operację zawsze da się wykonać deterministycznie, ponieważ jest implementowana na poziomie kodu, a nie sprzętu.
P-180066
pekfos
» 2023-03-21 19:37:12
Jak to się dzieje, że Java może wykorzystywać dziedziczenie wielu interfejsów, ale istnieją problemy z implementacją C++?
Interfejs to nie klasa. Java nie pozwala na dziedziczenie z wielu klas naraz.

Stąd, gdyby A miało zmienną polową, to B i C miałyby tę samą nazwę zmiennej, a D miałaby jaką zmienną (dziedziczoną po B lub C ).
D będzie mieć obie, chyba że A będzie wirtualną klasą bazową. Patrz: dziedziczenie wirtualne.
P-180068
« 1 »
  Strona 1 z 1