OOP Vererbung und Sichtbarkeit

C

C_A

Gast
Hallo,

ich mache offensichlich einen Gedankenfehler. Es geht um die Sichtbarkeit private. Ich habe bei Head-first "Java" gelesen: "private Member werden nicht geerbt": S. 180, 1. Auflage, 3. Nachdruck.

Es ist doch offensichtlich möglich, eine Klasse zu deklarieren, die in etwas so aussieht:
Java:
public class Mensch
{
      private String vorname;
      // ...
      public String getVorname()
      {
            return vorname;     
      }
}

Hieraus erstelle ich eine Unterklasse:
Java:
public class Student extends Mensch
{
      // ...
}

Die Testklasse wirft problemlos aus:
Java:
public class Test
{
     // ....
     public static void main[String[] args]
     {
          Student studi = new Student();
          System.out.println(studi.getVorname()); 
      }
}

Die Erfahrung zeigt, dass private Instanzvariablen vererbt werden. Dennoch scheue ich mich, den Text von head-first als "unrichtig" zu deklarieren, sondern gehe erstmal davon aus, dass ich einen Fehler mache. Aber wo?
 

Java.getSkill()

Aktives Mitglied
kein Fehler.

protected und public Instanzvariablen können ohne Probleme angesprochen werden.

objekt.instanzvariable= blabla;

bei private instanzvariablen brauchst du aber eine getter/setter Methode, da eine private Methode implizit vererbt wird, also nur durch setter getter Methode verfügbar ist.
 
C

C_A

Gast
Okay, danke erstmal. Mir stört die Radikalität der Aussage im Buch - ich lese es so, dass private Instanzvariablen GAR NICHT vererbt werden. Und genau das passiert doch ... bzw. nicht .... also, sie werden vererbt!
 

@x.l

Bekanntes Mitglied
Und genau das passiert doch ... bzw. nicht .... also, sie werden vererbt!

Ich will es mal probieren: Das Buch hat schon Recht, denn das private Member wird nicht vererbt. Halte dir vor Augen, was beim Aufruf von getVorname() passiert.

Beim Anlegen von Student, wird ja auch der Konstruktor von Mensch aufgerufen. Und somit auch eine Mensch-Instanz erzeugt. Machst du nun Student#getVorname so wird dieser Aufruf nach oben weiter gereicht und eigentlich auf dem Mensch-Objekt ausgeführt (da du getVorname ja NICHT überschrieben hast). Du hast auch innerhalb von Student keinen Zugriff auf das Member vorname.

Also wird vorname nicht mit vererbt.

(bitte korrigiert mich, wenn ich falsch liege)
 
B

bygones

Gast
Okay, danke erstmal. Mir stört die Radikalität der Aussage im Buch - ich lese es so, dass private Instanzvariablen GAR NICHT vererbt werden. Und genau das passiert doch ... bzw. nicht .... also, sie werden vererbt!

woher denn bitte ? das Buch hat schon recht, die Unterklasse kennt eine private Instanzvariable der Oberklasse NICHT.

Java:
public class Foo {
  private String bar;

  public String getBar() {
     return bar;
  }
}

public class Bla {
  public static void main(String[] args) {
     Foo f = new Foo();
     f.getBar();
  }
}

wuerdest du hier auch sagen, dass Bla die Variable bar kennt ? Ich denke nicht.

Nur weill die Klasse eine öffentliche Methode bereitstellt auf seine Variable zuzugreifen, heisst das nicht, dass andere diese Variable sehen können.

So ist dies auch bei Vererbung. Nur weil die Oberklasse eine Methode bereitstellt, die vererbt wird, hat die Unterklasse keinen Zugriff auf die Variable, da sie NICHT vererbt wird.
 

geneticZ

Bekanntes Mitglied
Hallo, ich würde hier gerne mal einhaken!
In einem Projekt stehe ich derzeit vor der Frage ob ich Instanzvariablen der Oberklasse privat mit Getter / Setter versehen soll oder eben protected an die Unterklasse vererben. Fakt ist, die Variablen werden in der Unterklasse benötigt. Gibt es diesbezüglich gängige Vorgehensweisen und was würdet ihr als guten Stil bezeichnen ?

Vielen Dank im Voraus
geneticZ
 
G

Gast2

Gast
Hallo, ich würde hier gerne mal einhaken!
In einem Projekt stehe ich derzeit vor der Frage ob ich Instanzvariablen der Oberklasse privat mit Getter / Setter versehen soll oder eben protected an die Unterklasse vererben. Fakt ist, die Variablen werden in der Unterklasse benötigt. Gibt es diesbezüglich gängige Vorgehensweisen und was würdet ihr als guten Stil bezeichnen ?

Vielen Dank im Voraus
geneticZ

IMMER Getter und Setter. Dann liegt die Verantwortung was wie gemacht wird eindeutig in der Oberklasse der ja auch die Variable gehört!

Diese muss ja ggfls. prüfen ob ein Wert gesetzt werden darf oder nicht. Wenn eine Unterklasse das selber kann ist nicht gewährleistet ob solche Prüfungen z.B. passieren.

imho sollten alle member private sein! Abgesehen von statischen Konstanten.
 

geneticZ

Bekanntes Mitglied
Aber sind dann protected Instanzvariablen nicht komplett obsolet?
Wann würde man denn diese Verwenden? Und sollte man dann die Getter-Methode möglichst wenig aufrufen und die Variable dann lokal in der Unterinstanz speichern oder jedesmal bei Verwendung die die Instanzvariable per Methoden-Aufruf beziehen?
 
Zuletzt bearbeitet:
C

C_A

Gast
Aber sind dann protected Instanzvariablen nicht komplett obsolet?

Protected ist zum Beispiel bei Methoden sinnvoll.

Wenn Du eine gekapselte private Variable hast, greifst Du beispielsweise mit protected Methoden darauf zu. Sonst würde das Prinzip der Datenkapselung auf dem Umweg getter- und setter-Methoden ausgehebelt.
 
G

Gast2

Gast
Aber sind dann protected Instanzvariablen nicht komplett obsolet?
Wann würde man denn diese Verwenden? Und sollte man dann die Getter-Methode möglichst wenig aufrufen und die Variable dann lokal in der Unterinstanz speichern oder jedesmal bei Verwendung die die Instanzvariable per Methoden-Aufruf beziehen?

Ich verwende nie protected member. Imho sind die auch wirklich unnötigt (zumindest fällt mir gerade kein vernünftiges Beispiel ein).

Puffern auf keinen Fall, sonst hebelst du ja eben wieder alles aus! Keine Prüfungen mehr ect...
 

geneticZ

Bekanntes Mitglied
Also die Getter und Setter Methoden sollten protected sein und die Variablen sollten nicht zwischengespeichert werden? Also ich spreche hier gerade natürlich von Ober- und Unterklassen und deren Vererbung. So langsam ordnet sich das alles in meinem Verständnis...
 
Zuletzt bearbeitet:
G

Gast2

Gast
Also die Getter und Setter Methoden sollten protected sein und die Variablen sollten nicht zwischengespeichert werden? So langsam ordnet sich das alles in meinem Verständnis...

- Variablen nicht zwischenspeichern! Das macht mal grade gar keinen Sinn.
- Getter und Setter protected wenn diese ausschließlich in der Vererbungshierarchie genutzt werden sollen!
- Getter und Setter public, falls auch extern Zugriff erfolgen soll.

Die Kapeslung besteht ja darin gewisse Prüfungen durchführen zu können (Z.b. muss Wert B verändert werden wenn A einen bestimmten Wert hat...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung und Sichtbarkeit von Methoden Java Basics - Anfänger-Themen 7
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