Polymorphie

O2016

Bekanntes Mitglied
Hi,

ich habe noch nicht so ganz den Vorteil von Polymorphie verstanden.
Bsp: BMW erbt von Auto und Audi erbt von Auto
Was macht es für einen Unterschied wenn ich

BMW bmw1 = new BMW();
oder eben
Auto bmw2 = new BMW();
mach?

Habe es mal ausprobiert, das einzige was ich herausgefunden habe, ist dass ich mit Nummer 2 bsp nicht auf Methoden von BMW zugreifen kann, sondern nur auf AUTO Methoden.
Mit Nummer 1 kann ich auf Auto und BMW zugreifen?

Nr2. engt ja eig. somit mehr ein?!

Ich kann lediglich mit Nr2 auf Methoden von BMW zugreifen, wenn diese überschreiben.
 

O2016

Bekanntes Mitglied
Was mich zusätzlich interessieren würde, ist wie schaut der Unterschied im Stack und Heap aus.

Bsp1 wäre bmw1 ist im Stack und zeigt auf ein leeres Objekt im Heap?!
da in den Klammern keine Parameter wie Name oder so angegeben wurden?
 

Tarrew

Top Contributor
Polymorphie hilft z.B. doppelten Code zu vermeiden und macht Code leichter wiederverwendbar. Stell dir vor, du möchtest eine Methode schreiben, die die Reichweite deiner Autos berechnet und du verwendest keine Polymorphie.
Dann sähe das so aus:
Java:
public class Test {

    public static void main(String[] args) {
        Bmw bmw = new Bmw(50, 8);
        berechneReichweite(bmw);

        Audi audi = new Audi(50, 8);
        berechneReichweite(audi);
    }

    static void berechneReichweite(Audi audi) {
        System.out.println(audi.getTankKapazitaet() / audi.getVerbrauch() * 100);
    }

    static void berechneReichweite(Bmw bmw) {
        System.out.println(bmw.getTankKapazitaet() / bmw.getVerbrauch() * 100);
    }

}

class Auto {

    private int tankKapazitaet;
    private double verbrauch;

    public Auto(int tankKapazitaet, double verbrauch) {
        this.tankKapazitaet = tankKapazitaet;
        this.verbrauch = verbrauch;
    }

    public int getTankKapazitaet() {
        return tankKapazitaet;
    }

    public void setTankKapazitaet(int tankKapazitaet) {
        this.tankKapazitaet = tankKapazitaet;
    }

    public double getVerbrauch() {
        return verbrauch;
    }

    public void setVerbrauch(double verbrauch) {
        this.verbrauch = verbrauch;
    }

}

class Bmw extends Auto {

    public Bmw(int tankKapazitaet, int verbrauch) {
        super(tankKapazitaet, verbrauch);
    }
}

class Audi extends Auto {

    public Audi(int tankKapazitaet, int verbrauch) {
        super(tankKapazitaet, verbrauch);
    }
}
Du hast also für jede Unterklasse von Auto eine eigene Methode und damit sehr viel doppelten Code.
Und jedes Mal wenn eine neue Unterklasse von Auto hinzukommt, müsstest du wieder eine neue Methode für die neue Klasse hinzufügen. Deswegen macht man sowas mit Polymorphie:
Java:
    static void berechneReichweite(Auto auto) {
        System.out.println(auto.getTankKapazitaet() / auto.getVerbrauch() * 100);
    }
Eine Methode für alle Auto-Klassen und keine Anpassungen, wenn neue Unterklassen hinzukommen.

Natürlich kannst du innerhalb der Methode ohne Casts etc. nicht auf die spezifischen Methoden etc. der einzelnen Unterklassen zugreifen, das ist aber in der Regel auch garnicht notwendig bzw. gewollt.


Zu dem 2. Punkt:

bmw1 zeigt auf ein Objekt im Heap. Leer ist daran garnichts, nur weil du im Konstruktur keine Werte mitgeben hast, belegt das Objekt genauso Speicher, wie jedes andere auch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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 Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
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

Ähnliche Java Themen

Neue Themen


Oben