Java Traps #1

wtorek, 9 października 2012
Tym wpisem chciałbym rozpocząć serię postów na temat języka programowania Java i ciekawych(lub nie) rzeczy, które można w tym języku spotkać. Będę chciał odpowiadać też na pytania, które sam zadaję "Czy da się tak zrobić?", "Co się stanie gdy zrobię tak i tak?". Zapraszam.





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.A
Widać więc, że prekompilacja wykonana przez IDE wykryła pętlę dziedziczenia.
Próba kompilacji zwraca taki błąd:
[tobiasz@tobiasz javaTraps]$ javac PetlaDziedziczenia.java  
PetlaDziedziczenia.java:6: error: cyclic inheritance involving PetlaDziedziczenia.A
private class A extends F {
            ^
1 error
Czyli w zasadzie wszystko jest ok. Jesteśmy ostrzegani przed błędem i pętla nie jest możliwa.
Zapraszam do zapoznania się z podobnym wpisem.


0 komentarze:

Prześlij komentarz