Szukam ekstremalnie trywialnego przykładu ilustrującego zastosowanie polimorfizmu w Javie, bo to co jest w necie jest dla mnie niezrozumiałe. Proszę o wsparcie.
hihi, oracle i mysql
Ktoś wspomoże jakimś kodem?
System.out.println(new File(""){ public String toString() {return "Mój plik";}});
I co to ma niby być? Dla was to 5 min, nie rozumiem dlaczego tak ciężko komuś pomóc...
To są takie głupoty że nie wiem...
abstract class Dupa {
String getDescription() {
return "IMO jest to " + getType();
}
abstract String getType();
}
final class DupaMagdaleny extends Dupa {
String getType() {
return "Gruszka";
}
}
final class DupaJustyny extends Dupa {
String getType() {
return "Jabłuszko";
}
}
Dupa dupa1 = new DupaMagdaleny();
Dupa dupa2 = new DupaJustyny();
System.out.println(dupa1.getDescription());
System.out.println(dupa2.getDescription());
skxx napisał(a):
To są takie głupoty że nie wiem...
abstract class Dupa {
String getDescription() {
return "IMO jest to " + getType();
}
abstract String getType();
}
final class DupaMagdaleny extends Dupa {
String getType() {
return "Gruszka";
}
}
final class DupaJustyny extends Dupa {
String getType() {
return "Jabłuszko";
}
}
Dupa dupa1 = new DupaMagdaleny();
Dupa dupa2 = new DupaJustyny();
System.out.println(dupa1.getDescription());
System.out.println(dupa2.getDescription());
DupaJustyny i Magdaleny dziedziczy z d**y - ok wszystko czaje na tym etapie, co się wyczynia w tych klasach, ale nie czaje gdzie ten polimorfizm, w końcu zachodzi zachodzi? :( Nie ma nic prostszego niż to?
Szukam ekstremalnie trywialnego przykładu ilustrującego zastosowanie polimorfizmu w Javie,
Zastosowanie w każdym języku będzie podobne. Implementacja będzie tylko inna.
Generalnie w polimorfizmie chodzi o to, żeby mieć ciastko i zjeść ciastko.
Wyobraź sobie, że masz obiekty typu A, B, C, D oraz... Z i chcesz żeby obiekty innego typu zachowywały się inaczej, odpowiednio do swojego typu (żeby np. aplikacja miała więcej elastyczności), a jednocześnie chcesz je traktować tak samo (żeby kod był prosty i żeby nie pisać tysiąca if-ów).
Wyobraź sobie klocki Lego. Są różne rodzaje klocków, a jednocześnie każdy klocek ma na górze identyczne okrągłe kubiki z napisem "Lego", a na dole takie samo zagłębienie. Tymi "standardowymi kubikami" w świecie programowania może być np. interfejs. Dwie klasy, które implementują ten sam interfejs są ze sobą kompatybilne. Klasę A możesz zastąpić przez klasę B. Tym sposobem możesz programować bardziej abstrakcyjnie i nie martwić się o obsługę przypadków dla wszystkich rodzajów klas.
hihi, oracle i mysql
i tak samo tutaj. Możesz stworzyć np. rożne klasy do obsługi różnych baz danych, które będą implementować ten sam interfejs - i dla reszty aplikacji nie będzie ważne, z którą bazą ma do czynienia. Aplikacja bedzie widziała tylko obiekt obsługujący bazę danych. Obiekt klasy A, czy obiekt klasy B - bez różnicy.
Ale: co ważne. Pod spodem będzie dziać się co innego. Każda klasa będzie sama decydować jak ma się zachować.
Najlepiej spójrz na pierwszy przykład który Ci podałem. Każda klasa dziedziczy po Object
skxx napisał(a):
Najlepiej spójrz na pierwszy przykład który Ci podałem. Każda klasa dziedziczy po Object
rozumiem ten przykład w całości, ale nie rozumiem, w którym miejscu zachodzi polimorfizm... która linijka kodu...
System.out.println(new File(""){ public String toString() {return "Mój plik";}});
System.out.println(new File(""){ public String toString() {return "Dupa plik";}});
println przyjmuje objekt
println wywołuje metodę toString z klasy Object xD
Dobra, może tak..
Object o1 = new File("f") {public String toString() {return "x";}};
Object o2 = new File("f") {public String toString() {return "y";}};
Object o3 = new File("f");
System.out.println(o1);
System.out.println(o2);
System.out.println(o3);