Lecimy dalej, bo w ramach wdrażania się w projekt robię za "Dezynsekcja, dezynfekcja, deratyzacja", czyli doprowadzam kod do stanu akceptowalnego przez Sonara.
Dziś dwa słowa o "magii" widoczności w javie.
package a.b.c
public class SuperClass{
protected Cośtam metoda(){
return cośtam;
}
}
Mamy sobie superklasę z metodą protected, która to metoda jest widoczna w dziedziczących i w pakiecie a.b.c
. Wszystko ok? Zatem tworzymy podklasę
package a.b.d
public class PodClass extends SuperClass{
@Override
protected Cośtam metoda(){
return super.metoda();
}
}
Która jest w pakiecie a.b.d
i która nadpisuje metodę z superklasy tak jak na listingu. Pytanie po co to robi?
Odpowiedź jest sobie inna klasa w pakiecie a.b.d
, która koniecznie musi korzystać z metody
, a jako, ze ta jest protected
w superklasie zatem jest nieosiągalna dla klas z pakietu a.b.d
. Tworzy się zatem sztuczną klasę, której zadaniem jest.... tunelowanie widoczności metody.
Tak też nazywam ten magiczny wzorzec wprost z Czelabińskich klimatów.