Program wielokrotnego dziedziczenia w Java
Ostatnio zmodyfikowano 2023-03-21 19:37
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). |
|
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. |
|
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. |
|
« 1 » |