Rzutowanie obiektów i metod.

0

Witam, mam problem z dostępem do metod klasy, jest to zapewne trywialny problem lecz nie mogę sobie z nim poradzić.
Mam dwie klasy:

 public class AlaMaKota {
    
    public void jakasMetoda(){
        System.out.println("Jakas metoda z AlaMaKota");
    }
}
public class AlaMaKota2 extends AlaMaKota {
    
    @Override
    public void jakasMetoda(){
        System.out.println("AlaMaKota2!!");
    }
    
} 

Następnie, chcę zrobić coś takiego:

 AlaMaKota2 ala = new AlaMaKota2();
        AlaMaKota ala2 = (AlaMaKota)ala;
        ala2.jakasMetoda();
 

Nie wnikając w sens działania programu, mam obiekt klasy AlaMaKota2, chcę dostać z niego tylko część informacji, które są w obiektcie AlaMaKota (więc go rzutuję). Jednak, po wywołaniu metody jakasMetoda() zostaje wywołana metoda z klasy AlaMaKota2 - czy jest jakiś sposób aby wywołać metodę z klasy AlaMaKota ? Problemem - bądź nie - jest to że metoda jakaśMetoda() musi pozostać override.

0

To się nazywa polimorfizm i w 99% przypadków chcesz żeby wywołała sie metoda z klasy właściwej, tzn pochodnej a nie bazowej.
W wielkim skrócie: nie da sie tak zrobić. Klasa pochodna może co prawda wywołac metodę z klasy bazowej używając super.metoda() ale spoza tej klasy nie ma takiej możliwości.

Tzn oczywiście na upartego to się wszystko da i refleksją możesz uzyskać taki efekt jaki chcesz, ale odradzam ;]

0

Tak tak, wiem do czego to służy i korzystam z tego. Lecz w tym przypadku akurat chciałbym zrobić to na odwrót.

No nic, dzięki wielkie za szybką odpowiedz :)

0

Jeżeli masz taki problem, to obstawiał bym, że coś jest nie tak z Twoją hierarchią klas. Problemy tego typu wróżą nietrzymanie się zasady podstawienia Liskov. Może trzeba by od nowa przeanalizować strukturę klas i wprowadzić jakieś zmiany, pozamieniać gdzieniegdzie dziedziczenie na kompozycję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1