Czy jest możliwe dziedziczenie klasy A po klasie B, która dziedziczy po klasie C, która dziedziczy po klasie A? Jednym słowem, czy jest możliwa pętla dziedziczenia i jak na to zareaguje IDE oraz kompilator?
Mamy taką klasę, która zawiera klasy prywatne, wzajemnie po sobie dziedziczące:
package javaTraps; public class PetlaDziedziczenia { private class A extends F { } private class B extends A { } private class C extends B { } private class D extends C { } private class E extends D { } private class F extends E { } }
Oto reakcja IDE:
Widać wskazanie na błąd przy wszystkich klasach. Przy klasach A, C, D, E, F komunikat błędu jest następujący:
The hierarchy of type C (tu wstaw odpowiednią klasę) is inconsistent.Przy klasie B natomiast komunikat jest taki:
Cycle detected: a cycle exists in the type hierarchy between PetlaDziedziczenia.B and PetlaDziedziczenia.AWidać więc, że prekompilacja wykonana przez IDE wykryła pętlę dziedziczenia.
Próba kompilacji zwraca taki błąd:
[tobiasz@tobiasz javaTraps]$ javac PetlaDziedziczenia.javaCzyli w zasadzie wszystko jest ok. Jesteśmy ostrzegani przed błędem i pętla nie jest możliwa.
PetlaDziedziczenia.java:6: error: cyclic inheritance involving PetlaDziedziczenia.A
private class A extends F {
^
1 error
Zapraszam do zapoznania się z podobnym wpisem.
0 komentarze:
Prześlij komentarz