Vererbung: Welche Methode wird verwendet?

seakey

Mitglied
Hallo,

ich habe eine Frage zum Thema Vererbung und hoffe, mir kann jemand weiterhelfen:

Wie gesagt möchte ich vererben, habe also eine Vaterklasse und eine Kindklasse. Nun rufe ich in der Kindklasse eine Methode der Vaterklasse auf, welche wiederum eine andere Methode der Vaterklasse aufruft. Diese andere Methode wird aber wieder von mir in der Kindklasse überschrieben.

Bisher war ich der Meinung, dass dann die überschriebene Methode in der Kindklasse aufgerufen wird, was aber nicht der Fall ist, wenn ich meinen Code ausführe (es wird also die Methode der Vaterklasse aufgerufen).

Liege ich mit meiner Meinung falsch?

(Ich hoffe, dass ich das Problem einigermaßen verständlich erklären konnte)
 
Also:

Vaterklasse:
Java:
public class PDFTextStripper extends PDFStreamEngine {
     protected void processPage( PDPage page, COSStream content ) throws IOException {
          ...
          writePage();
          ...
     }
    
     protected void writePage() throws IOException {
          ...
     }
}

Kindklasse:
Java:
public class PDFTextLineStripper extends PDFTextStripper {
     protected void processPages( List<PDPage> pages ) throws IOException {
          Iterator<PDPage> pageIter = pages.iterator();
          while( pageIter.hasNext()) {
               PDPage nextPage = pageIter.next();
               PDStream contentStream = nextPage.getContents();
               ...
               processPage( nextPage, contents );
               ...   
           }
     }
     
     protected void writePage() throws IOException {
          ...
     }
}

Ich rufe in PDFTextLineStripper.processPages(...) die Methode PDFTextStripper.processPage(...) auf. Diese wiederum ruft writePage() auf. Hier soll aber nicht die PDFTextStripper.writePage(), sondern die PDFTextLineStripper.writePage() aufgerufen werden.
 
Zuletzt bearbeitet:
Auf die Schnelle:

Java:
public class Vaterklasse {

	public static String getOutput() {
		return getString();
	}
	
	public static String getString() {
		return "String of Vaterklasse"; 
	}
}

Java:
public class Kindklasse extends Vaterklasse {
	
	public static void main(String[] args) {
		System.out.println(getOutput());
	}
		
	public static String getString() {
		return "String of Kindklasse";
	}
}

Liefert "String of Vaterklasse"
 
das sind ja auch statische Methoden, die werden nicht vererbt und werden auch nicht an einem Object aufgerufen. Und da die Kind Klasse keine statische Methode getOutput() besitzt wird diese im Vaterkontext aufgerufen
 
Hier mal ein Bsp mit Vererbung, in dem wie zu erwarten die überschriebene Methode der Kindklasse aufgerufen wird.
Java:
public class TestClass {
	public static void main(String[] a) {
		Child child = new TestClass().new Child();
		child.saySomething();
		child.sayBla();
	}
	
	class Father {
		protected void saySomething() {
			sayHello();
		}
		
		protected void sayHello() {
			System.out.println("Father says: Hello!");
		}
	}
	
	class Child extends Father {
		protected void sayBla() {
			for (int i=0; i<5; i++)
				saySomething();
		}
		
		protected void sayHello() {
			System.out.println("Child says: Hello!");
		}
	}
}
 
Ok, das Beispiel hab ich tatsächlich verbockt 😳
Muss jetzt nur noch nachvollziehen, warum das in meinem ursprünglichen Code nicht tut. Die sind natürlich alle non-static.

Aber erstmal vielen Dank für eure Hilfe.
 

Zurück
Oben