Vererbung - Sichtbarkeitsmodifikation - protected

B

bartholomaeus87

Mitglied
Hallo zusammen,

in objektorientierten Sprachen versuchen wir ja Datenkapselung zu betreiben, richtig?
Bedeutet, dass wir z.B. Attribute vor unerlaubtem Zugriff bzw. unerlaubter Änderung schützen.

Beispiel soll sein: ein Blumenladen. Ich habe eine Klasse "Artikel" geschrieben. Die hat ein Attribut "preis".
Jetzt gibt es verschiedene Artikel: Dekoration und Pflanzen. Beides Unterklassen von "Artikel" und beide sollen natürlich das Attribut "preis" erben.
Entsprechend darf "preis" nicht private sein, sondern muss zumindest package (default) oder protected sein; je nachdem ob die Unterklassen sich im gleichen Package befinden.

Aber: Jetzt ist mein Attribut innerhalb meines Packages nicht mehr geschützt. Wenn ich im Team arbeite und wir arbeiten zusammen an einem Package, dann könnte jemand den Preis ungeschützt ändern. Zum Beispiel auf einen negativen Wert.

Das kann doch nicht im Sinne des Erfinders sein, oder?


Vielen Dank
 
D

DrPils

Aktives Mitglied
Die Attribute sollten eigentlich immer private sein.
Du kannst ja für den Preis in der Elternklasse gegeben falls getter und/oder setter anlegen.
Im Setter könntest du dann dafür sorgen, dass der Preis keine illegalen Werte bekommt.
Die getter und setter werden dann an die Subklassen vererbt. Ausgenommen natürlich sie wären privat
 
B

bartholomaeus87

Mitglied
Ah, danke :)
Ja, das ist irgendwie logisch. Bin ich aber nicht drauf gekommen.
 
B

bartholomaeus87

Mitglied
Wobei ich grade nicht so ganz verstehe, wie der Setter/Getter benutzt werden kann, wenn die Subklasse das entsprechende Attribut gar nicht hat
 
L

LimDul

Top Contributor
Die Subklasse hat das Attribut ja "quasi", kann nur nicht direkt drauf zugreifen.
 
D

DrPils

Aktives Mitglied
Das Objekt zur laufzeit hat es, du kannst es so sehen: Jeder Artikel hat einen Preis -> jede Blume ist ein Artikel.
Das privat bedeutet nur, dass es für andere Klassen nicht sichtbar ist.
 
B

bartholomaeus87

Mitglied
Also jeder Artikel hat seinen Preis und jede Pflanze ist ein Artikel. Also hat das Pflanzen-Objekt das Attribut, kann es aber nur nicht "sehen", weil es in Artikel private ist?
 
W

White_Fox

Top Contributor
Versuche, die Vererbungshierarchie als eine Art von Aufgabenteilung zu begreifen. Die Klasse 'Pflanze' als solche regelt alles, was sie zur Pflanze macht und sie von anderen Artikeln wie z.B. Brot unterscheidet.
Brot und Pflanze sind beides Artikel, aber was ein Artikelobjekt ausmacht wird ja von der Artikelklasse geregelt.

Oder anders herum: die Klasse Artikel muß ja offenkundig nichts über die Implementierungsdetails von der Klasse Pflanze wissen. Andersherum funktioniert es (oft, nicht immer) genauso.
 
B

bartholomaeus87

Mitglied
Ich hab die Vererbung und die Vererbungshierarchie immer falsch verstanden.

Ich dachte immer, wenn eine Unterklasse ein Attribut von der Oberklasse nicht erbt, weil es private ist, dann würde das Objekt vom Typ der Unterklasse dieses Attribut auch nicht besitzen. Aber in Wirklichkeit sieht die Unterklasse dieses Attribut nur einfach nicht.

Aber das Objekt vom Typ der Unterklasse hat das Attribut trotzdem. Einfach schon deswegen, weil das Objekt nicht nur vom Typ der Unterklasse ist, sondern ebenso vom Typ der Oberklasse. Jede Pflanze ist nicht nur eine Pflanze sondern immer auch ein Artikel.
 
W

White_Fox

Top Contributor
Genau.

Kapselung ist eigentlich etwas ganz Wunderbares. In C (wo du praktisch kaum etwas kapseln kannst) hat man sehr oft globale Variablen für alles Mögliche. Globale Variablen werden aus allen möglichen Ecken und Enden deines Programms geschrieben und gelesen. Wenn eine solche Variable z.B. von drei verschiedenen Programmstellen beschrieben wird und eine davon schreibt Müll rein - nach solchen Fehlern kannst du dich totsuchen. Vor allem wenn es sich z.B. um Mikrocontroller handelt, die über weniger Debuggingmögichkeiten verfügen und die man nicht einfach mal anhalten kann.

Daher versteckt man erstmal alles was nicht sichtbar sein muß, und wenn etwas sichtbar sein muß dann erstmal auch nur für die, die es sehen müssen. Ein private durch ein protected ersetzt werden ohne daß es Compilerfehler gibt, ebenso kann ein protected durch ein public problemlos ersetzt werden.
Anders herum ist das nicht immer einfach, nicht selten völlig unmöglich (stell dir vor du machst das in einer Bibliothek die von mehreren Programmen benutzt wird). Problemlos geht es meistens nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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_Sike 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
scitex 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
M 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
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1
M Vererbung - Cannot Find Symbol constructor... Java Basics - Anfänger-Themen 11
S Problem bei Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 3
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 11
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
T Deutschverständnis-Frage zur Vererbung Java Basics - Anfänger-Themen 5
B Erste Schritte Vererbung klappt nicht Java Basics - Anfänger-Themen 24
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
M Warum ist Vererbung angeblich problematisch? Java Basics - Anfänger-Themen 8
P Vererbung Java Basics - Anfänger-Themen 2
J Vererbung Hilfe zu Klassen / Vererbung Java Basics - Anfänger-Themen 12
E Vererbung Frage zu Zugriffsrechten/Vererbung Java Basics - Anfänger-Themen 3
P Vererbung Java Basics - Anfänger-Themen 6
X Vererbung Vererbung Frage Java Basics - Anfänger-Themen 6
F Überschreiben nach einer Vererbung Java Basics - Anfänger-Themen 2
V Vererbung Vererbung, Interfaces und OOP... Java Basics - Anfänger-Themen 10
S Vererbung/Globale Variablen Java Basics - Anfänger-Themen 8
Z Vererbung: Java Basics - Anfänger-Themen 3
J Redefinieren der Vererbung Java Basics - Anfänger-Themen 10
J Vererbung Kleines Problem bei Vererbung! Java Basics - Anfänger-Themen 2
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
G Vererbung Java Basics - Anfänger-Themen 35
B Vererbung Vererbung von privaten Variablen Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben