Prosty przykład ilustrujący zastosowanie polimorfizmu

0

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.

0

hihi, oracle i mysql

0

Ktoś wspomoże jakimś kodem?

0
System.out.println(new File(""){ public String toString() {return "Mój plik";}});
0

I co to ma niby być? Dla was to 5 min, nie rozumiem dlaczego tak ciężko komuś pomóc...

0

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());
0
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?

0

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

0

Najlepiej spójrz na pierwszy przykład który Ci podałem. Każda klasa dziedziczy po Object

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

0
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

0

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);

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