Objekte verknüpfen - Java (was kann ich noch verbesser?)

Genau! Das ist der Hinweis, dass du die Methode in Freundin implementieren musst
Code:
@Override
public void ausgabeDaten() {
 System.out.println("Weil ich 'n Mädchen bin!");
}

P.S.: ich teste die Snippets nicht, die ich hier schreibe. Falls irgendwo ein Semikolon o.ä. fehlt, bitte selbst hinzufügen. :D

Edit:

Als Goodie mal eine Demonstration, was dir das bringt, was du gerade machst
Code:
public class MyClass {
    
    static abstract class Mensch {
        public abstract void ausgabeDaten();
    }
    
    static class Kumpel extends Mensch {
        @Override
        public void ausgabeDaten() {
            System.out.println("bla");
        }
    }
    
    static class Freundin extends Mensch {
        @Override
        public void ausgabeDaten() {
            System.out.println("blub");
        }
    }
    
    public static void main(String args[]) {
        Mensch[] alle = {new Kumpel(), new Freundin()};
        for (Mensch m : alle) {
            m.ausgabeDaten();
        }
    }
}
 
Zuletzt bearbeitet:
Dann Danke für die bisherige Hilfe.
Denke ich werde morgen dann mal versuchen den Builder-Pattern zu programmieren.
Hier noch der aktuelle Stand:

Code:
package VerknuepfungVonObjekten;

public class MainClass {

    public static void main(String[] args) {
        //3 Kumpels
        Kumpel bernd = new Kumpel("Bernd", "Blond", AugenFarbe.Blau, 190);
        Kumpel alfon = new Kumpel("Alfon", "Braun", AugenFarbe.Braun, 180);
        Kumpel lukas = new Kumpel("Lukas", "Grau", AugenFarbe.Grün, 200);

        //3 Freundinnen
        Freundin bernadett = new Freundin("Bernadett", "Braun", AugenFarbe.Blau, 190);
        Freundin alfine = new Freundin("Alfine", "Braun", AugenFarbe.Braun, 170);
        Freundin lukara = new Freundin("Lukara", "Grau", AugenFarbe.Rot, 150);

        //3 Autos
        Auto autoA = new Auto("VW", "Rot", 2000);
        Auto autoB = new Auto("Renault", "Grün", 2000);
        Auto autoC = new Auto("Porsche", "Irischgrün", 2000);

        //Verkuppeln
        bernd.FreundinZuweissen(bernadett);
        alfon.FreundinZuweissen(alfine);
        //lukas.FreundinZuweissen(lukara);

        //Auto andrehen
        bernd.AutoZuweissen(autoA);
        alfon.AutoZuweissen(autoB);
        //lukas.AutoZuweissen(autoC);

        //Ausgabe Pärchen
        bernd.ausgabePaerchen();
        alfon.ausgabePaerchen();
        lukas.ausgabePaerchen();

        //Bernd ist mit dem Äußeren seiner Feundin nicht zu frieden
        bernd.FreundinRueckgeben().schoenheitsOp("Pink", AugenFarbe.Rot, 1);
        bernd.FreundinRueckgeben().ausgabeDaten();
        //Bernd beläd sein Auto
        bernd.AutoRueckgeben().beladen((float) 0.5);
        bernd.AutoRueckgeben().ausgabeDatenAuto();
    }
}

Code:
package VerknuepfungVonObjekten;

public abstract class Mensch {

    //Objektvariablen
    private String name;
    private String haarFarbe;
    private AugenFarbe augenFarbe;
    //private String augenFarbe;
    private int groesseInCm;

    //Konstruktor
    public Mensch(String name_, String haarFarbe_, AugenFarbe augenFarbe_, int groesseInM_) {
        name = name_;
        haarFarbe = haarFarbe_;
        augenFarbe = augenFarbe_;
        groesseInCm = groesseInM_;
    }
    //Signatur Methode (keinen Rumpf, keine Implementierung, jedenfalls nicht in der Oberklasse)
    public abstract void ausgabeDaten();
    
    //Methoden
    public void umTaufen(String neuerName) {
        name = neuerName;
    }

    public void schoenheitsOp(String neueHaarFarbe, AugenFarbe neueAugenFarbe, int neueGroesse) {
        haarFarbe = neueHaarFarbe;
        augenFarbe = neueAugenFarbe;
        groesseInCm = neueGroesse;
    }

    //Rückgabe der Variablen
    public String returnName() {
        return name;
    }

    public String returnHaarFarbe() {
        return haarFarbe;
    }

    public AugenFarbe returnAugenFarbe() {
        return augenFarbe;
    }

    public float returnGroesse() {
        return groesseInCm;
    }
}

Code:
package VerknuepfungVonObjekten;

public enum AugenFarbe {        //Klasse die nur bestimmte Werte annehemn kann
    Grün, Blau, Braun, Rot;
}

Code:
package VerknuepfungVonObjekten;

public class Kumpel extends Mensch{

    //Objektvariablen
    private Freundin seineFreundin;   //Darin wird die Referenz auf ein Objekt vom Typ Freundin gespeichert
    private Auto seinAuto;       //Darin wird die Referent auf ein Pbjekt vom Typ Auto gespeichert

    //Klassenvariablen
    int anzahlKumpels = 0;

    //Konstruktor
    public Kumpel(String name_, String haarFarbe_, AugenFarbe augenFarbe_, int groesseInM_) {
        super (name_, haarFarbe_, augenFarbe_, groesseInM_);
    }

    //Methoden
    @Override public void ausgabeDaten() {
        System.out.println("Er heißt:\t\t" + returnName());
        System.out.println("Seine Haarfarbe ist:\t" + returnHaarFarbe());
        System.out.println("Seine Augenfarbe ist:\t" + returnAugenFarbe());
        System.out.println("Seine Größe ist:\t" + returnGroesse());
    }

    public void FreundinZuweissen(Freundin seineFreundin_) {
        seineFreundin = seineFreundin_;
    }

    public Freundin FreundinRueckgeben() {
        return seineFreundin;
    }

    public void AutoZuweissen(Auto seinAuto_) {
        seinAuto = seinAuto_;
    }

    public Auto AutoRueckgeben() {
        return seinAuto;
    }

    public void ausgabePaerchen() {
        ausgabeDaten();
        if (seineFreundin != null) {
            seineFreundin.ausgabeDaten();
        } else {
            System.out.println(Kumpel.super.returnName() + " hat keine Freundin!");
        }
        if (seinAuto != null) {
            seinAuto.ausgabeDatenAuto();
        } else {
            System.out.println(Kumpel.super.returnName() + " hat kein Auto!");
        }
        System.out.println("\n\n\n");
    }
}

Code:
package VerknuepfungVonObjekten;

public class Freundin extends Mensch {
    
    //Klassenvariablen
    static int anzahlVergebenerFrauen = 0;

    //Konstruktor
   public Freundin(String name_, String haarFarbe_, AugenFarbe augenFarbe_, int groesseInM_) {
       super(name_, haarFarbe_, augenFarbe_, groesseInM_); 
    }
    
    //Methoden
    @Override public void ausgabeDaten(){
        System.out.println("Seine Freundin ist:\t" + returnName());
        System.out.println("Ihre Haarfarbe ist:\t" + returnHaarFarbe());
        System.out.println("Ihre Augenfarbe ist:\t" + returnAugenFarbe());
        System.out.println("Ihre Größe ist:\t\t" + returnGroesse());
    }
}

Code:
package VerknuepfungVonObjekten;

public class Auto {
    
    //Objektvariablen
    private String marke;
    private String farbe;
    private int gewichtInKg;

    //Klassenvariablen
    static int anzahlProduzierterAutos = 0;

    //Konstruktor
    public Auto(String marke_, String farbe_, int gewicht_) {
        marke = marke_;
        farbe = farbe_;
        gewichtInKg = gewicht_;
    }

    //Methoden
    public void ausgabeDatenAuto() {
        System.out.println("Seine Auto ist ein:\t" + marke);
        System.out.println("Autofarbe ist:\t\t" + farbe);
        System.out.println("Autogewicht ist:\t" + gewichtInKg);
    }

    public void umlackieren(String neueFarbe) {
        farbe = neueFarbe;
    }

    public void beladen(float gewichtÄnderung) {
        gewichtInKg += gewichtÄnderung;
    }
}
 
Ok, danke für die Tipps :)
Ergänzung ()

Hätte noch eine Frage:

Warum muss ich in der Klasse Kumpel in Zeile 46 "super" schreiben?
Code:
System.out.println(Kumpel.super.returnName() + " hat keine Freundin!");

In der Klasse MainClass in Zeile 37 aber nicht?
Code:
 bernd.FreundinRueckgeben().schoenheitsOp("Pink", AugenFarbe.Rot, 1);

Mit "super" greife ich doch auf die Methode der Oberklasse zu.
Aber sowohl "returnName()" als auch "schoenheitsOp()" ist eine Methode der Oberklasse Mensch.

Warum brauche ich also eimal "super" und einmal nicht?
 
yxy schrieb:
Warum muss ich in der Klasse Kumpel in Zeile 46 "super" schreiben?
Weil dein Ansatz falsch ist. Kumpel ist eine Klasse, du willst aber eine Instanz davon haben.
Ich habe sowas schon mal gesehen, dass der Zugriff über die Klasse mit this oder super dann die Instanz liefert. Keine Ahnung wie sich das Prinzip nennt oder funktioniert oder warum man es machen sollte.

Lass einfach "Kumpel.super." weg, returnName() greift dann auf die Methode der aktuellen Instanz zu.
Und bitte benenne die Methode in "getName()" um.
 
Code:
	int count;

	public void SetNewCount(int count)
	{
		this.count = count;
	}

Ist so leserlicher sonst würde mir auch nichts einfallen.
 
Zurück
Oben