Klassen, Vererbung, Konstruktoren

yeahr

Mitglied
Hallo zusammen ich hänge gerade bei einer Umsetzung die ich mir selber überlegt habe.


Ich habe eine Klasse Properties:

Java:
public class Properties {

    protected String name = "";
    protected int weight = 0;
    protected String health = "";
    protected String dnaSequence = "";
    
    
    
    public Properties(String name, int weight, String health
            , String dnaSequence ){
        this.name = name;
        this.weight = weight;
        this.health = health;
        this.dnaSequence = dnaSequence;
    }
   
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }

    public String getHealth() {
        return health;
    }
    public void setHealth(String health) {
        this.health = health;
    }
    public String getDnaSequence() {
        return dnaSequence;
    }
    public void setDnaSequence(String dnaSequence) {
        this.dnaSequence = dnaSequence;
    }
 
}


Eine Klasse Organ:
Java:
public abstract class Organ {

    protected boolean transplantable = false;
    protected boolean transplanted = false;
    protected Properties properties;
    
    public Organ(boolean transplantable, boolean transplanted, 
            Properties properties){
        this.transplantable = transplantable;
        this.transplanted = transplanted;
        this.properties = properties;
    }
    
    
    public boolean isTransplantable() {
        return transplantable;
    }
    public void setTransplantable(boolean transplantable) {
        this.transplantable = transplantable;
    }
    public boolean isTransplanted() {
        return transplanted;
    }
    public void setTransplanted(boolean transplanted) {
        this.transplanted = transplanted;
    }
    public Properties getProperties() {
        return properties;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
}

Und eine Klasse Heart die von Organ erbt:
Java:
public class Heart extends Organ{

    
    public Heart(boolean transplantable, boolean transplanted,
            Properties properties) {
        super(transplantable, transplanted, properties);
        
    }



}

Wie kann ich in der Klasse Heart über Properties bei dem Attribut "weight" den Wert 300 zuweisen? Ich müsste ja nur was in der Klasse Heart dazu schreiben oder? Nur ich komme leider nicht darauf🙁. Hoffe mir kann jemand weiterhelfen
 
properties.setWeight(380);?
Oder wie?

Die Klasse Properties ist bereits in Benutzung, besser du spezifizierst sie wie z. B. OrganProperties. (Keine Ahnung was Organ auf englisch heißt.)
 
Erst mal Danke für die Antwort. Ich glaub ich hab mich nicht so klar ausgedrückt. Mit properties.setWeight(300) ist mir klar, dass man es auf 300 setzen kann. Aber Ich will es so machen, dass im Konstruktor in der Klasse "Heart" das Gewicht bei "properties" auf Standard 300 gesetzt wird. Hab es mit properties.setWeight probiert. siehe hier:

Java:
public class Heart extends Organ{

    
    public Heart(boolean transplantable, boolean transplanted,
            Properties properties) {
        super(transplantable, transplanted, properties.setWeight(300));
        
    }



}

Nur da kommt die Fehlermeldung: The constructor Organ(boolean, boolean, void) is undefined

P.S. : Organ heißt auf Englisch auch Organ
 
Verstehe, aber wie kann ich über "Properties" bei "weight" den Wert 300 zuweisen, so dass bei der Klasse "Heart" für "weight" der Wert Standard 300 ist ? Ich könnte ja in der Klasse "Properties" weight auf 300 setzen nur dann ist bei allen abgeleiteten Klassen von "Organ" weight auf 300, aber ich will "nur" bei "Heart" weight auf 300 setzen
 
Ok also das heißt in "Heart" beim Konstruktor super(transplantable, transplanted); und dann irgendwie über properties auf weight zugreifen und weight auf 300 setzen?! Ich probier die ganze zeit aus nur ich komm nicht drauf
 
Java:
    public Heart(boolean transplantable, boolean transplanted,
            Properties properties) {
        super(transplantable, transplanted, properties);
        
        properties.setWeight(300)
    }
 
Danke, so klappt es ! Noch eine Frage nur ob ich es richtig gemacht habe und zum Verständnis. Wenn ich jetzt eine Main erstell und ein Herz erzeugen möchte ist es richtig noch einen Konstruktor in "Properties" zu implementieren ohne weight, da ja in der Klasse "Heart" schon weight auf 300 gesetzt wurde oder sollte ich es anders umsetzen?


Klasse Properties:

Java:
public Properties(String name,  String health
            , String dnaSequence){
        this.name = name;
        this.health = health;
        this.dnaSequence = dnaSequence;
    }

Die Main:

Java:
public class TestClass {
    
    public static void main(String []args){
        
        
        System.out.println("________Organ_________");
        
        Properties p3 = new Properties("Herz", "gesund","324234234");
        
        Heart h1 = new Heart(false, false, p3);
        
        System.out.println(h1.getProperties().getWeight()+" gramm");
    }

}
 
Sollte so passen. Wenn du einen Default-Wert allgemein haben willst setzt du es im Properties-Konstruktor (sonst ist es bei Klassenzahlen immer 0) oder wenn jedes Organ einen haben soll im Organ-Konstruktor.

Wenn so viele Dinge bereits über die Propertie geregelt sind solltest du vielleicht noch einmal überdenken ob sich da Vererbung lohnt, aber weiß natürlich nicht was du vor hast.
 
Bin der Meinung dass Properties da nicht wirklich eine gute Lösung sind.

Wenn schon "ParameterObjekte", dann lieber eigene, aussagekräftige die auch typsicher sind.
 
Nochmals vielen Dank euch beiden! Ich nehme die Tipps gerne an. Wegen Properties, ich habe die Klasse so genannt weil ich noch eine Klasse abstrakte "Human" habe und dann noch "Man" und "Woman", die beide von "Human" erben. "Human" hat dann auch Attribute die sowohl "Man" als auch "Woman" haben sollen also, aber dann sind da noch die Organe, die auch diese Attribute haben. Deswegen will ich die Klasse "Properties" nicht "OrganProperties" nennen weil sie auch von "Human" genutzt wird.
 
Nein kein Fehler von dir!!! Ich hatte die anderen Klassen vorher gar nicht erwähnt!! Also waren eure Antworten/Tipps gerechtfertigt!
 

Zurück
Oben