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