Super und Sub-Klassen

danst0

Mitglied
Hallo,

ausgehend von einer Superklasse habe ich mehrere Subklassen
Java:
class SuperClass {
public void abc() {
// some code
}
}
class SubClass extends SuperClass {
public void abc() {
// überschreiben
}
int neue_Variable = 0;
}

In meinem Code bekomme ich nun einen Parameter SuperClass x übergeben der entweder SuperClass oder SubClass enthält.

Meine Frage ist nun: Ist es irgendwie möglich auf die Variablen und Methoden von x zuzugreifen, ohne ein down casting zu machen?
Fall: x instanceof SubClass: Könnte ich also x.abc() aufrufen oder auch x.neue_Variable = 5 setzen?

Hintergrund ist, dass ich sehr viele (unterschiedliche) Subklassen habe, bei welchen die Variablen und Funktionen fast durchgehend überschrieben werden (also identischer Name). Daher wäre es sehr praktisch, wenn ich nicht immer eine Fallunterscheidung machen müsste.

Daniel
 
Generics würd ich mir für diesen Fall mal ansehen - aber x.abc() kannst du sowieso ohne Cast aufrufen, da sowohl die Super- als auch die Sub- Class diese Methode haben.

Java:
public class SuperSubTest {

	public SuperSubTest() {
		SuperClass superClass = new SuperClass();
		testMethode(superClass);
		
		SubClass subClass = new SubClass();
		testMethode(subClass);
		}
	
	private void testMethode(SuperClass sc) {
		sc.abc();
		}
	
	public static void main(String...strings) {
		new SuperSubTest();
		}
	}


class SuperClass {
	
	public void abc() {
		System.out.println("abc von SuperClass");
		}	
	}

class SubClass extends SuperClass {
	
	@Override
	public void abc() {
		System.out.println("abc von SubClass");
		}	
	}
 
Zuletzt bearbeitet:
überlege ganz einfach selber, warum sollte 'x.neue_Variable = 5' funktionieren?
soll das Programm nachschauen ob es irgendeine Unterklasse gibt bei der das möglich ist und dann für Oberklassen den Aufruf einfach immer zulassen?
was ist bei der Oberklasse Object von allen Klassen, soll da alles erlaubt sein?
ohne Typisierung gehts in Java nicht, das wäre PHP

wie schon gesagt gehen nur Methoden, die in der Oberklasse bekannt sind, abc() ist ein Beispiel,
wenn setX() vorhanden ist und das in verschiedenen Klassen überschrieben wird, dann man auch das gehen,

oder z.B. eine Methode
init(int a, int b, int c, int d);
wovon drei Subklassen a verwenden, vier Subklassen b usw., nicht schön aber zumindest syntaktisch korrekt
 

Zurück
Oben