statische Attribute: Vererbung und Zugriff darauf

Hallo!

Ein Verständnisproblem...

Es gibt drei Klassen: MyClass, MySubClass und MyChildClass. Dabei ist MyClass die direkte Basisklasse für die anderen zwei:
Code:
public class MyClass {
	
	private static int counter;
	
	public static void setCounter(int counter) {
		MyClass.counter = counter;
	}
	
	public static int getCounter() {
		return counter;
	}
	
}
Code:
public class MySubClass extends MyClass {
	
}
Code:
public class MyChildClass extends MyClass {
	
}
D.h. alle drei Klassen haben das Attribut counter -- die Basisklasse von sich aus und die abgeleiteten erben es.

Was ich nicht verstehe, ist, warum beim Verändern des Wertes des Attributs counter einer (egal welcher von den drei) Klasse, sich auch die Werte der counter-Attribute der restlichen zwei Klassen ändern.

Code:
public class Main {
	
	public static void main (String[] args) {
		
		MyClass myClass = new MyClass();
		MySubClass mySub = new MySubClass();
		MyChildClass myChild = new MyChildClass();
		
		myClass.setCounter(123);
		
		System.out.println("MyClass.counter = " + MyClass.getCounter());
		System.out.println("MySubClass.counter = " + MySubClass.getCounter());
		System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
		
		MySubClass.setCounter(456);
		
		System.out.println("MyClass.counter = " + MyClass.getCounter());
		System.out.println("MySubClass.counter = " + MySubClass.getCounter());
		System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
		
		MyChildClass.setCounter(789);
		
		System.out.println("MyClass.counter = " + MyClass.getCounter());
		System.out.println("MySubClass.counter = " + MySubClass.getCounter());
		System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
		
	}

}
MyClass.counter = 123
MySubClass.counter = 123
MyChildClass.counter = 123
MyClass.counter = 456
MySubClass.counter = 456
MyChildClass.counter = 456
MyClass.counter = 789
MySubClass.counter = 789
MyChildClass.counter = 789
Kann jemand sagen, warum alle drei Attribute nicht dasgleiche, sondern dasselbe referenzieren?

Danke.
 
Hallo, ich muss ehrlich gestehen ich hab es noch nie gebraucht und mir noch nie Gedanken darüber gemacht, aber ich dachte immer dass ein private static Attribut in den Unterklassen das selbe ist und nicht das gleiche?
 
Das weiß ich zwar nicht genau, aber dann müsste es doch bei der Definition des gleichnamigen Attributs in den abgeleiteten Klassen zu einem Namenskonflikt kommen, was nicht der Fall ist...
 
Hi,
static-Attribute und Methoden sind immer aufrufbar, also auch ohne Instanz:
Java:
de.test.MyClass.setCounter(wert);
de.test.MyClass.getCounter; // Ausgabe = wert
//Vergleiche mit:
java.lang.Math.round(1.01) //Die Methode round() der Klasse Math kannst du ohne Instanz der Klasse Maths aufrufen, weil sie mit static deklariert wird
Wenn du diese Klasse nur vererben willst, und auf jeden Fall eine Instanz haben willst, dann lasse doch static einfach weg.
Ciao
DosCoder
 

Neue Beiträge

Zurück