Rzutowanie obiektów i metod.

Rzutowanie obiektów i metod.
BI
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
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:

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

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

Kopiuj
 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.

KA
napisz dokładniej jaki masz problem. pewnie źle te klasy projektujesz
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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 ;]


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
BI
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
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 :)

airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
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ę.

edytowany 1x, ostatnio: airborn

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.