Vererbung und Sichtbarkeit von Methoden

Status
Nicht offen für weitere Antworten.
M

mskmania

Gast
Hallo zusammen,

kann mir bitte jemand sagen, wieso in unten aufgeführten Code "private f()" ausgegeben wird?
Was macht es für einen Unterschied, ob die Mein-Methode in A oder B drinnen steht?
Wie ist die Aufruf Hirarchie bei den Sichtbarkeitsmodifier?
Code:
public class A {
     private void f() {
          System.out.println("private f()");
     }

     public static void main (String[] args) {
	  A b = new B();
	  b.f(); 
     }
}


public class B extends A {
     public void f() {
          System.out.println("public f()");
     } 
}

Danke.

Gruß
Marc
 

andre111

Bekanntes Mitglied
A b = new B();

Das Objekt wird als Typ A erkannt, wenn du willst, dass "public f()" ausgegeben wird musst du folgendes machen

A b = new B();
((B)b).f();
 

Der Müde Joe

Top Contributor
Dieses Verhalten ändert sich aber sobald f nicht mehr private ist sonder public.
Dann wird nämlich f überschrieben!
zB
Code:
public class A {
	
	private void c() {
		System.out.println("Ac");
	}

	public void f() {
		System.out.println("Af");
	}

	public static void main(String[] args) {
		A b = new B();
		b.f();
		b.c();
		((B)b).c();
	}

	public static class B extends A {
		@Override
		public void f() {
			System.out.println("Bf");
		}

		public void c() {
			System.out.println("Bc");
		}
	}
}

ausgabe:

EDIT: :wink:
 

diggaa1984

Top Contributor
da die Signaturen der 2 Methoden unterschiedlich sind, überschreibt B nicht die Methode in A, somit bleibt ihm nur das "private void f()" zur Auswahl .. wenn du das oben auch public machst, dann erhältst du auch die Ausgabe der Klasse B, da diese dann die Methode der Oberklasse überschreibt.

EDIT: war jemand schneller :D
 
M

mskmania

Gast
so ganz klar ist mir das noch nicht.

b ist vom statischen Typ A. b hält eine Referenz auf B. Bei der dynamischen Methodensuche wird doch in der untersten Subklasse mit Suchen begonnen und wenn b die Referenz des Typs B hält, wieso wird dann nicht beim ersten f(), das gefunden wird (also in B), auch das aufgerufen?

Ich hab gedacht, dass der statische Typ eigentlich uninteressant ist und nur nach dem dynamischen geschaut wird.

Wenn f() aus A public ist, dann überschreibt f() aus B f() aus A. Das ist mir klar.
 

diggaa1984

Top Contributor
würde mir es nun so erklären das er erst die Methodensignatur von oben in der Hierarchie sucht (Methodenname + parameterliste und merkt sich dann die Sichtbarkeit dazu), quasi die allgemeinste Methode. Danach beginnt er von der untersten Klasse zur Oberklasse diese Signatur zu suchen, wenn sie gefunden wurde, nutzt er sie.

wäre ne logische schlussfolgerung, da in "Java ist auch eine Insel" steht, dass er nach einer möglichen überschriebenen Methode von unten nach oben sucht.
 

Der Müde Joe

Top Contributor
Mit static hat das gar nichts zu tun.

Ein Beipsiel:
Code:
public class B extends A {
	@Override
	public void f() {
		System.out.println("Bf");
	}

	public void c() {
		System.out.println("Bc");
	}

	public static void main(String[] args) {
		A b = new B();
		b.f();
		b.c(); //nicht sichbar da private //compiler error
	}
}
Code:
public class A {
	
	private void c() {
		System.out.println("Ac");
	}

	public void f() {
		System.out.println("Af");
	}
}

Der Aufruf in B: b.c() geht nicht: im Typ A gibt es keine öffentliche Methode c.
Der Aufruf in B: b.f() geht: es wird f in B ausgeführt.

Um b.c() auszuführen muss klar gemacht werden, dass b vom Type B ist, mit einem cast
((B)b).c()

Dann findet er aber die Methode aus B...die in A ist für B nicht sichtbar
 
M

mskmania

Gast
so jetzt hab ichs geschnallt. vielen dank für eure hilfe.

P.S.: mit "statisch" war nicht "static" gemeint.

Es war so gemeint: Der statische Typ der Variablen b ist A, der dynamische Typ ist B.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C OOP Vererbung und Sichtbarkeit Java Basics - Anfänger-Themen 14
R Sichtbarkeit bei Vererbung Java Basics - Anfänger-Themen 2
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben