Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden?

csjacq

Mitglied
Hallo,

ich versuche gerade Polymorphie zu verstehen. Ich verstehe einfach das Konzept und den Verwendungszweck/Sinn nicht.

Sagen wir ich habe die "Superklasse" Animal. Und die "Subklassen" Cat und Dog.
Was ist denn der unterschied, wenn ich sage:

Animal cat = new Cat();
Animal dog = new Dog();

oder:

Dog dog = new Dog();
Cat cat = new Cat();

Kann mir jemand erklären wann ich was verwenden soll und wo der unterschied liegt?
 

JCODA

Top Contributor
Verwende wo es geht ersteres. So Schreibstil du Code, der sowohl für Hunde, wie auch für Katzen gilt. Falls du zuerst etwas für Hunde geschrieben hast, später aber für Katzen, so müsstest du jedes "Dog" gegen "Cat" ersetzen, im anderen Fall musst du nur bei der Objekterstellung einmal etwas verändern.
 

Robat

Top Contributor
Ein Unterschied zwischen den beiden ist, dass du bei Animal dog = new Dog() nicht darauf angewiesen bist das dog wirklich ein Objekt vom Typ Dog referenziert.
Du kannst dann im Code immer noch sagen dog = new Cat().
Die Möglichkeit hast du nicht wenn du explizit Dog dog = new Dog() schreibst.
 

Javinner

Top Contributor
...ich versuche gerade Polymorphie zu verstehen...
Kann mir jemand erklären wann ich was verwenden soll und wo der unterschied liegt?
Objektorientierte Programmierung hat gesagt.:
Die Objektorientierung bietet einen soliden Werkzeugkasten an, der es uns erlaubt, die Zielsetzungen der Entwicklung von Software anzugehen. Die Basiswerkzeuge in diesem Werkzeugkasten sind die drei Grundelemente objektorientierter Software:
  • Datenkapselung
  • Polymorphie
  • Vererbung
Wir geben im Folgenden einen kurzen Überblick über die drei Basistechni-
ken...
Polymorphe lässt sich nicht in wenigen Worten erklären, es ist ein breites Thema und um es zu verstehen, wirst du nicht herum kommen, ein Fachbuch in die Hand zu nehmen. Hier paar nützliche Seiten für den Anfang:
Lies dich ein. Allen anderen hat es auch geholfen.
 

Stan3110

Neues Mitglied
Sagen wir ich habe die "Superklasse" Animal. Und die "Subklassen" Cat und Dog.
Was ist denn der unterschied, wenn ich sage:

Animal cat = new Cat();
Animal dog = new Dog();

oder:

Dog dog = new Dog();
Cat cat = new Cat();


Ich bin nur ein Informatikstudent und habe all diese Sachen selber erst vor kurzen gelernt, aber vielleicht ich versuche den Unterschied zu erklären. Also in deiner Basisklasse (oder Superklasse) sind ja alle Attribute und Methoden, die alle Tiere haben. Dann hast du zwei Unterklassen erstellt, die deine Basisklasse erweitern sollen. Also etwas noch dazu hinzufügen, was nur Katzen oder nur Hunde haben. Zum Beispiel in deiner Dog Klasse hast du eine Methode bringDenStock(); geschrieben, und in der Klasse Cat fängDieMäuse();. Mit
Animal cat = new Cat();
Animal dog = new Dog();
hast du ja zwei Objecte erzeugt, die zwar alle Eigenschaften von Tieren haben, haben aber nicht die Eigenschaften, die diese Tiere (Hunde und Katzen) ausmachen. Hund wird kein bringDenStock(); können und Katze kein fängDieMäuse(); Das ist der Unterschied aus meiner Sicht. Noch was dazu, in der Regel die Basisklassen (Superklassen) sind nicht instanzierbar, also die sind abstrakt.
 
Zuletzt bearbeitet:

neulii

Mitglied
Der Sinn dahinter Besteht indem, verschiedene Animals (Cats & Dogs) in einem Container zu speichern.

Ein kleines Beispiel zur Verdeutlichung:
Main-Klasse:
Java:
public class Main {

    public static void main(String[]args){

        Dog d = new Dog();
        Cat c = new Cat();

        Animal[] a = new Animal[2];

        a[0] = d;
        a[1] = c;

        //Du kannst über alle Animals iterieren und die gemeinsame Methode run oder die abstrakte Methode makeNoise()  ausführen lassen
        for (int i = 0; i< a.length; i++){
            a[i].makeNoise();
            a[i].run();
        }
    }
}
Animal-Klasse:
Java:
//abstrakte Klasse
public abstract class Animal {

    public void run(){
        System.out.println("Animal is Running");

    }
//abstrakte Methode wird in den Unterklassen definiert
    public abstract void makeNoise();
}

Cat-Klasse:
Java:
public class Cat extends Animal {

    @Override
    public void makeNoise() {
        System.out.println("MIAU");
    }
}

Dog-Klasse:
Java:
public class Dog extends Animal {

    @Override
    public void makeNoise() {
        System.out.println("WAU");
    }
}
 

Neumi5694

Top Contributor
Hallo,
Was ist denn der unterschied, wenn ich sage:
Animal cat = new Cat();
Animal dog = new Dog();
oder:
Dog dog = new Dog();
Cat cat = new Cat();
Kurz gesagt: kein Unterschied. Beides macht genau das Gleiche. Ohne weiteren Code ist es egal, was von beidem du verwendest.
Selbst das macht keinen Unterschied.
Java:
Object dog = new Dog();
Object cat = new Cat();
Es geht darum, was danach damit passieren soll, was du mit der Variable danach anfangen willst.
Wenn du in Folge nur gemeinsame Eigenschaften benötigst, wie z.B. den Namen des Tiers, bietet es sich an, "Animal" zu verwenden, da es in dem Fall egal ist, ob es sich um eine Katze oder einen Hund handelt.
Würdest du z.B. aber eine Katzenspezifische Methode brauchen, oder das Objekt an eine Methode übergeben, die explizit Katzen benötigt, dann müsstest du wie folgt vorgehen, du müsstest dem Compiler erst mal sagen, dass es sich beim Objekt um eine Katze handelt.
Java:
Animal theAnimal = new Cat();
theAnimal.doWhatAllAnimalsCanDo();
catSpecificMethod((Cat)theAnimal);
((Cat)theAnimal).doWhateverACatCan();

Die Erklärung "Verwende wo es geht ersteres." ist also absolut korrekt. So lange du die Variable vom Typ "Animal" verwendest, kannst du damit Hunde und Katzen verwalten. Sobald du aber etwas Art-spezifisches damit machen musst, ist sie ungeeignet, du musst sie zuerst casten, was zu einer Exception führt, wenn darin nicht der richtige Typ gespeichert wurde, wie in diesem Beispiel:
Java:
Animal theAnimal = new Dog();
theAnimal.doWhatAllAnimalsCanDo();
((Cat)theAnimal).doWhateverACatCan(); //Cast wird fehlschlagen
Der Compiler wird das akzeptieren (wirft wahrscheinlich eine Warnung aus), aber bei der Ausführung wird ein Fehler auftreten, da Dog nicht als Cat behandelt werden kann.
 

JStein52

Top Contributor
Animal cat = new Cat();
Animal dog = new Dog();
Diese Art und Weise Objekte anzulegen und zu referenzieren macht ja nicht wirklich Polymorphie aus. Ich finde ihr diskutiert noch ein bisschen am Thema vorbei. Interessant wird es ja wenn alle drei Klassen die Methode knurren() implementieren, aber jeweils unterschiedlich. Welche wird bei dog.knurren() und bei cat.knurren() aufgerufen ? Beide sind ja vom Typ Animal !! Oder nicht ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
jhCDtGVjcZGcfzug Was genau ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 5
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
S Was bewirkt ganz genau throw hinter einem Funktionsnamen? Java Basics - Anfänger-Themen 14
B Webhooks - was genau ist das und was kann damit JAVA Java Basics - Anfänger-Themen 5
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
L Was genau macht -> Java Basics - Anfänger-Themen 18
Dawinartor Erste Schritte Was genau steckt dahinter? Java Basics - Anfänger-Themen 7
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
A Was genau ist ein Standardkonstruktor Java Basics - Anfänger-Themen 10
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
B Für gesamte Schleife genau X Sekunden benötigen Java Basics - Anfänger-Themen 1
J TabelView - Kann mir jemand die Sequenz genau erklären ? Java Basics - Anfänger-Themen 2
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
G Methoden Was genau macht die Methode light.setInfluencingBounds ? Java Basics - Anfänger-Themen 5
H Wer genau ist 'Er'? Java Basics - Anfänger-Themen 4
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
B Was genau ist getClass().getRessouce() Java Basics - Anfänger-Themen 1
Y Wie setze ich genau eine Stückliste (UML) in Java um? Java Basics - Anfänger-Themen 9
D Was genau ist JDBC? Java Basics - Anfänger-Themen 2
K Code vereinfachen mit Schleife, aber wie genau? Java Basics - Anfänger-Themen 3
L Jarfiles packen, wie geht's genau? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
S Erste Schritte Konstruktor - wie genau funktioniert der Code? Java Basics - Anfänger-Themen 16
J Klickposition genau bestimmen Java Basics - Anfänger-Themen 12
N aktuelle Datum Mikrosekunden genau bestimmen Java Basics - Anfänger-Themen 8
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
F Was soll dieses Programm genau machen ? Java Basics - Anfänger-Themen 9
D Wie genau programmiere ich eine Assoziationsklasse? Java Basics - Anfänger-Themen 3
D Wie genau kann ich in Java Komponenten entwickeln? Java Basics - Anfänger-Themen 6
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
D Was genau bedeutet und bewirkt dieses @override? Java Basics - Anfänger-Themen 15
M Was ist genau eine Abstraktion in java Java Basics - Anfänger-Themen 3
J Was genau davon ist Anweisung, was Deklaration? Java Basics - Anfänger-Themen 2
bigbasti Warum genau braucht man Interfaces? Java Basics - Anfänger-Themen 10
A Was bedeutet folgende Programmcodezeile genau Java Basics - Anfänger-Themen 6
B Zeitmessung nicht genau genug Java Basics - Anfänger-Themen 11
L Hilfe, ich versteh nicht was mein Prof genau von mir will! Java Basics - Anfänger-Themen 9
C Wie genau geht man bei der Konzeptionierung vor? Java Basics - Anfänger-Themen 5
P Was genau bedeutet Feld Java Basics - Anfänger-Themen 3
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
S Stack.pop() wie genau funktioniert das? Java Basics - Anfänger-Themen 3
D Mathematik in Java - genau? Java Basics - Anfänger-Themen 6
X Was genau heißt "public static void main(String[] args) Java Basics - Anfänger-Themen 4
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
T Polymorphie und LSP Java Basics - Anfänger-Themen 4
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
A Polymorphie Java Basics - Anfänger-Themen 4
O Polymorphie Java Basics - Anfänger-Themen 3
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
K Polymorphie Java Basics - Anfänger-Themen 6
C Kurze Frage zur Polymorphie Java Basics - Anfänger-Themen 1
J Polymorphie - Beispielcode Java Basics - Anfänger-Themen 7
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
T Polymorphie Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
C Polymorphie Java Basics - Anfänger-Themen 1
L Polymorphie Polymorphie verstehen? Java Basics - Anfänger-Themen 2
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
N Methoden Polymorphie Java Basics - Anfänger-Themen 11
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
R Polymorphie Java Basics - Anfänger-Themen 2
M Vererbung Enum Vererbung/Polymorphie Java Basics - Anfänger-Themen 2
P Polymorphie Java Basics - Anfänger-Themen 6
xehpuk Polymorphie Polymorphie in Parametern Java Basics - Anfänger-Themen 5
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
A OOP Polymorphie Java Basics - Anfänger-Themen 6
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
C OOP Frage zu Polymorphie Java Basics - Anfänger-Themen 4
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
T Vererbung und Polymorphie Java Basics - Anfänger-Themen 7
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
Z Vererbung oder Polymorphie? Java Basics - Anfänger-Themen 5
J Polymorphie Java Basics - Anfänger-Themen 6
G Polymorphie und Interface Java Basics - Anfänger-Themen 2
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 25
S Polymorphie - oder auch spanisches Dorf? Java Basics - Anfänger-Themen 5
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben