Vererbung privater Variablen

jhamra

Mitglied
Hey,

wie kann ich auf private Variablen einer SuperKlasse in einer Subklasse zugreifen? Hier mal ein stark vereinfachtes Beispiel:


Java:
public abstract class Baum{

    private int alter;
    private int hoehe;
    
    public Baum(){
    
    }
    
    public Baum(int alter,int hoehe){
        this.alter=alter;
        this.hoehe=hoehe;
    }

    //abstract, weil man weiß nicht, wie schnell ein allgemeiner Baum wächst.
    public abstract void wachsen();
    
    
    public void altern(){
        alter++;
    }
}

Java:
public class Apfelbaum extends Baum{
    
    public Apfelbaum(){
    
    }
    
    public Apfelbaum(int alter, int groesse){
        super(alter,groesse);
    }
    
    public void wachsen(){
       // ?????
    }
}

Wie kann ich jetzt meinen Apfelbaum wachsen lassen? Mit einer protected Variable in Baum würde es funktionieren, aber wir sollten die Variablen eigentlich private machen. Dann habe ich aber keinen Zugriff mehr.
Und dass man mittels Getter und Setter die Variable einfach so verändern kann, möchte ich eigentlich nicht.

Überdies wüsste ich auch nicht, wie ich in der Methode "wachsen" in Apfelbaum auf einen Getter zugreifen könnte. Baum.getHoehe() würde nicht gehen, ich müsste ja erst ein Objekt erzeugen. Aber Baum ist ja abstract und ich würde auch lieber auf die schon vorhandene Variable zugreifen, anstatt auf eine neu erzeugte...

Ich hoffe ihr versteht mein Problem und danke schonmal fuer die Antworten 🙂
 
Zuletzt bearbeitet von einem Moderator:
Die Methode wachsen soll ja abstract sein, weil man nicht weiß wie schnell irgendein Baum wächst. Implementiert soll sie erst in der Subklasse. Also ist die einzige Möglichkeit die Variable protected zu machen?
 
Und wie wende ich den protected setter dann in der Methode "wachen" an? Mit Baum.setHoehe(23); gehts ja nicht. Steh grad ein bisschen auf dem Schlauch...
 
So ähnlich 😉

Java:
abstract class baum{
   private int hoehe;

   protected void wachsen();
   
   protected void setHoehe(int hoehe){
      this.hoehe = hoehe;
   }
   
   public int getHoehe(){
      return this.hoehe;
   }
}

class apfelbaum extends baum{

   @Override
   public void wachsen(){
      super.setHoehe(super.getHoehe() + 1);
   }

   static void main(...){
      baum b = new Apfelbaum();
      b.wachsen();
      System.out.println(b.getHoehe()); //Ausgabe: 1
   }
}

super. muss nicht sein, sieht aber IMHO besser aus und jeder weiß, dass die Implementierung in einer Superklasse zu finden ist. Ich schreibe es immer mit dazu. Das ist aber Geschmackssache.
 
Zuletzt bearbeitet:

Zurück
Oben