Vererbungsfrage

Status
Nicht offen für weitere Antworten.
J

Jusi

Gast
hier mal 3 Beispielklassen. ich versuche einmal die Methode der Unterklasse printA aufzurufen, was auch gemäß Erwartung funktioniert. Beim zweitenmal versuche ich aber die Unterklasse in den Typen der Superklasse zu casten und dachte eig. er würde mir hier jetzt die Methode aus der Oberklasse aufrufen, was er aber nicht tut.

Was mach ich falsch, was muss ich machen um mit meinem unterklassen-objekt an die methode der oberklasse dran zu kommen?

Code:
public class Super 
{
	private int a;
	
	public Super()
	{
		a = 8888;
	}

	public void printA()
	{
		System.out.println("Super! A hat den Wert: " + a);
	}
}

Code:
public class SubClass extends Super
{
	private int a;
	
	public SubClass()
	{
		a = 90;
	}

	
	public void printA()
	{
		System.out.println("Sub! A hat den Wert: " + a);
	}
}

Code:
public class Main 
{
	public static void main(String [] args)
	{
		SubClass x = new SubClass();
		x.printA();
		((Super)x).printA(); //selbe wei x.printA() - wieso?
	}

}
 
J

Jusi

Gast
super kann ich doch nur in der klasse selbst benutzen.

meinst du ich soll das printA mit super.a benutzen oder was soll mir das sagen?
 

chrs

Mitglied
Ja, wenn du an printA() der super Klasse drankommen willst aber nur die konkreteste Klasse hast, musst du in der konkreten Klasse schon

Code:
public void printSuperA()
   {
      super.printA();
   }

machen, die Frage ist warum du das so machen möchtest, hast du einen Anwendungsfall dafür?
 
G

Guest

Gast
chrs hat gesagt.:
Ja, wenn du an printA() der super Klasse drankommen willst aber nur die konkreteste Klasse hast, musst du in der konkreten Klasse schon

Code:
public void printSuperA()
   {
      super.printA();
   }

machen, die Frage ist warum du das so machen möchtest, hast du einen Anwendungsfall dafür?

nein, mir schwrimt im kopf rum, dass wenn ich

Code:
 ((Super)x).printA();

eigentlich an die Oberklassen rankommen müsste.

Hab ich, abgesehen von der Änderung der implementierung wie du vorgeschlagen hast, noch eine ander Möglichkeit durch irgendwie cast die Methode meiner Oberklasse aufzurufen?

Oder gilt der tatsächliche Typ den ich in meiner Variable halte als fix und unveränderlich. Will ich die printA() der Oberklasse brauch ich also ein konkretes Objekt von "Super" also

Code:
Super a = new Super();
a.printA();

??? anders geht nichts?

ich will mir das noch mal verinnerlichen, da ich morgen Klausur hab. Mir schwebte im Kopf rum das ich durch casten trotzdem "oben" rankomme. anscheinend ja nicht :eek:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Vererbungsfrage Java Basics - Anfänger-Themen 12
G Vererbungsfrage Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben