Vererbung Vererbung von privaten Variablen

bbacardi

Mitglied
Guten Tag!
Ich habe 2 Dateien: Lebewesen.java und Tier.java
Tier erbt von Lebewesen.
In der Datei Lebewesen habe ich eine Variable "private int alter".
Jetzt möcht ich in der Tier Datei auf diese zugreifen, jedoch bekomme ich einen Fehler, dass die Variable einen privaten Zugriff hat:
q6afdeg7.jpg

Wenn ich die Variable public setze, funktioniert alles. Jedoch war sie nun mal als private vorgegeben.
Weiß jemand wie ich mein Programm trotzdem zum laufen bekomme? Vielen Dank! 🙂
 
Zuletzt bearbeitet von einem Moderator:
Entweder machst du die Variable protected oder du machst dir public/protected Getter/Setter- dazu, je nachdem, wie du brauchst 🙂
 
private heißt nun mal dass die variable nur in dieser Klasse sichtbar ist...wenn du dies nicht ersetzen darfst z.B. durch protected, musst du eben entsprechende (Zugriffs-)Methoden einbauen und nutzen
 
Java:
private int alter;

public int getAlter(){return alter;}
public void setAlter(int pAlter){alter = pAlter;}

Kapselung - du koenntest zum Beispiel den setter so aendern, dass er das Alter prueft - beispielsweise darf das alter immer nur groesser werden...

du kannst aber auch eine alterungsmethode einbauen und den Setter wegwerfen:
Java:
public void geburtstag() {alter++;}
 
Ich würde eigentlich grundsätzlich Getter und Setter verwenden, protegierte oder öffentliche Member sollten unveränderlich (final) sein. Der Grund dafür ist, dass Member evtl. ungültige Werte setzen könnten (z.B. null bei Objekten). Mit Gettern und Settern dagegen hat man die Möglichkeit diese Werte aug Gültigkeit zu prüfen und evtl. defaults zu setzen.
 
Danke für die zahlreichen Antworten, aber ich darf weder Setter noch Getter verwenden. Hier mal der Code:

Java:
package leben;
public abstract class Lebewesen
{
	private int alter;
	public Lebewesen(int alter){this.alter = alter;}
	public Lebewesen(){alter = 1;}
	public String text(){return "Alter: " + alter;}
}

Java:
package leben;


class LebewesenTest{
	public static void main(String[] args){
		Druckbar[] dr = new Druckbar[2];
		
		dr[0] = new Tier(3, "Maus", 'w');
		dr[1] = new Tier("Katze", 'm');
		for (int i = 0; i < dr.length; i++)
			system.out.printl(dr[i]);
	}
}

Java:
package leben;

interface Druckbar{
	public abstract String toString();
}

Java:
package leben;
public class Tier extends Lebewesen implements Druckbar
{

	String name;
	char geschlecht;
	Tier(int alter, String name, char geschlecht){
		this.alter = alter;
		this.name = name;
		this.geschlecht = geschlecht;
	}
	
	Tier(String name, char geschlecht){
		this.name = name;
		this.geschlecht = geschlecht;
	}
	
	public String toString(){
		return String.format("Alter: %s\nName: %s\nGeschlecht: %s", alter, name, geschlecht);
	}

}
]

In der Tier Datei habe ich jetzt noch weitere Eigenschaften (eine andere Datei wird später wieder von dieser erben), neben dem Alter. Die ersten 3 Dateien waren vorgegeben.
 
Etwas hingefrickelt (und bestimmt nicht Sinn der Aufgabe!) könntest du das so lösen:
Java:
public class Tier extends Lebewesen implements Druckbar
{
 
    String name;
    char geschlecht;
    Tier(int alter, String name, char geschlecht){
        super (alter);
        this.name = name;
        this.geschlecht = geschlecht;
    }
    
    Tier(String name, char geschlecht){
        this.name = name;
        this.geschlecht = geschlecht;
    }
    
    @Override
	public String toString(){
        return String.format("%s\nName: %s\nGeschlecht: %s", text(), name, geschlecht);
    }
}
 
Java:
 Tier(int alter, String name, char geschlecht){
        super(alter);
        this.name = name;
        this.geschlecht = geschlecht;
    }

so könntest du es lösen....

ps. zu spät...
 
Muss bei Aufruf von super(...) immer eine Variable übergeben werden? (Antwort: Nein😀) Wenn Du gerne defaultmäßig eine (KONSTANTE) 1 hättest? Wie würde dann der Aufruf von super(..) aussehen?
[EDIT]Hä?!? Hast Du gerade Deine Frage gelöscht? So macht der Post hier ja nicht mehr viel Sinn...:autsch:[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben