abstract, privat, Vererbung

Status
Nicht offen für weitere Antworten.
O

OOP-ler

Gast
Hallo, folgendes Problem:
Ich möchte eine Klasse machen, worin sich eine abstrakte Methode befinden, die am besten privat sein soll, sprich wenn eine Klasse von dieser Grundklasse erbt, soll es diese Methode überschreiben, aber diese soll dann privat sein. Aber natürlich geht dies nciht, da der java compiler dann ein Fehlermeldung auswirft... Aber wie kann man nun mein Vorhaben realisieren ? Wenn ich protected nehme, dann können ja theoretisch Klassen im selben Paket auf diese Funktion zugreifen, was ich aber ganz gern verhindern würde.... Wie macht man daS ?=

Gruß Ralf
 

0x7F800000

Top Contributor
OOP-ler hat gesagt.:
Hallo, folgendes Problem:
Ich möchte eine Klasse machen, worin sich eine abstrakte Methode befinden, die am besten privat sein soll, sprich wenn eine Klasse von dieser Grundklasse erbt, soll es diese Methode überschreiben, aber diese soll dann privat sein.
so sind die schlüsselwörter nun mal nicht gedacht, private garantiert nur, dass niemand ausserhalb der klasse die methode verwenden darf, und abstrakt garantiert, dass die klasse selbst die methode auch nicht aufrufen kann, weil diese ja nicht implementiert ist. Also kann man nirgendwo die methode aufrufen, deswegen lässt der kompiler das verständlicherweise nicht zu, weil es nicht viel Sinn macht. :bahnhof: wie bist du denn in so eine Situation geraten, wozu soll dein vorhaben in etwa gut sein?
 
O

OOP-ler

Gast
Wieso könnte ich darauf nciht zugreifen ?
Ich verstehe nciht, warum Java das hier nicht zulässt:
Code:
	static abstract class Blub
	{
		abstract privat void Neutral(); 
	}
	
	static class Blub2 extends Blub
	{
		private void Neutral()
		{
			
		}
	}

Das geht natürlich nicht, weil man keine privaten MEthoden erben kann, aber dass ist doch ziemlich doof, wenn man eine abtrakte Methode garantiert haben will, die von niemanden außer dieser Klasse selbst aufgerufen werden kann !
Oder verhaspel ich mich jetzt ?!

Gruß Ralf
 
O

OOP-ler

Gast
Oh sry, noch was vergessen: Ich meinte natürlich von niemand anders, als abgeleiteten Klassen, eine Sichtbarkeitsvariable, die das bezweckt fände ich gut !
 

musiKk

Top Contributor
Für abgeleitete Klassen (und Klassen im selben Package) gibt es protected. Auf private Methoden können auch abgeleitete Klassen nicht zugreifen.
 
O

OOP-ler

Gast
Dann haben die einfach was vergessen :p xD Ne mal im Ernst, ist mein Vorhaben denn so selten ? Ich finde das total legitim, dass man garantieren will, dass eine bestimmte methode nur in der Herachie einer Klasse verfügbar ist...

Gruß Ralf
 
O

OOP-ler

Gast
Nein ! Bei protected können auch andere Klassen des selben Pakets auf diese Methode zugreifen, ist jetzt in meinem Fall ok, aber bei anderen Situationen ist auc hdas nicht zufrieden stellend, das finde ich fehlt der Sprache Java... Aber auch den anderen Sprachen...

Gruß Chris
 

musiKk

Top Contributor
Ich finde, das reicht so, aber das ist mal wieder Geschmackssache. In C++ kann man das granularer einstellen.
 

0x7F800000

Top Contributor
da muss es doch irgendwo einen knick in der logik geben... wenn du das vorhandensein dieser methode zur privatsache der unterklassen erklärst, dann ist es doch absurd, eine solche methode allen unterklassen aufzuzwingen.

wie soll denn etwas privat sein, wenn es von der super klasse diktiert wird? das ist doch ein widerspruch an sich :roll:
 

Loep

Aktives Mitglied
Protected Methoden können doch NUR von abgeletiteten Klassen genutzt werden, oder? Auch Klassen des selben Package können dies nicht, dazu wäre der Package Scope (sprich kein Marker vorm Namen) notwendig.
Oder hab ich da was falsch verstanden?
 

musiKk

Top Contributor
Ja.
http://en.wikipedia.org/wiki/Java_keywords hat gesagt.:
protected - An access modifier used in a method, field or inner class declaration. It signifies that the member can only be accessed by elements residing in its class, subclasses, or classes in the same package.
 

ARadauer

Top Contributor
[qoute] or classes in the same package.[/qoute]
finde ich persönlich nicht schön, mir wärs lieber gewesen wenn für das ein eigenes schlüsselwort eingeführt worden wäre...
 

tfa

Top Contributor
ARadauer hat gesagt.:
or classes in the same package.
finde ich persönlich nicht schön, mir wärs lieber gewesen wenn für das ein eigenes schlüsselwort eingeführt worden wäre...
Ich finde, es gibt schon genug Schlüsselworte. Und braucht man so eine feine Unterscheidung in der Praxis wirklich? Ich fände es nicht mal schlimm, wenn es nur public und private gäbe. Einige Sprachen (z.B. Smalltalk und Objective C) kennen Zugriffsmodifikatoren überhaupt nicht. Da sind alle Methoden öffentlich und trotzdem kann man damit programmieren.
 

0x7F800000

Top Contributor
ja, sicher, wenn man zurechnungsfähig ist, kann man damit sicherlich vernünftig programmieren. Aber dann kann schneller etwas schief gehen, wenn jemand, der keinen Plan hat, irgendetwas damit anstellt. Und dann werden von der IDE haufenweise methoden angezeigt, die einen draußen eigentlich nicht interessieren, das könnte auch nerven. Diese wörtchen machen die Sprache ja nicht mächtiger, sondern ein wenig verständlicher und übersichtlicher, und gerade wegen der übersichtlichkeit ist java ja so beliebt. Aber eigentlich gibt's schon genug schlüsselwörter, auch wenn's zu UML nicht ganz passt. ;)
 

Landei

Top Contributor
Ich denke, du hast ein grundsätzliches Verständnisproblem - nicht darüber, wie die Modifier arbeiten, sondern wozu sie gedacht sind. "private" heißt, dass dieser Teil der Klasse ein Implementierungsdetail ist, das niemanden anderes etwas angeht. "Private" ist deine Garantie, das keine Information nach außen dringt. Und dazu brauchst du keine anderen Klassen zu durchsuchen, wenn du "private" in deinem Quellcode hast, ist dieses Stück "sicher" (wenn man mal von Reflection-Zauberei absieht). Nun nehmen wir mal an, dein Anfangsbeispiel wäre erlaubt. Dann könnte ein böser, böser Mensch deine Basisklasse Blub ändern, z.B. indem er eine public Methode einfügt, die Neutral() aufruft. Das würdest du dann nicht mitbekommen (insbesondere, wenn Blub in einer Bibliothek liegt) und dein Neutral() wäre dann alles andere als privat - *jede* Klasse könnte es auf einmal (wenn auch indirekt) aufrufen.
Soll heißen: Sobald *irgendeine* andere Klasse (ob Basisklasse, Unterklasse, selbes Package) auf deine Members zugreifen kann, ist das Member einfach nicht mehr "private". Wenn die Basisklasse von der Methode wissen muss, brauchst du protected. Was du allerdings machen kannst, wäre Netral() in Blub2 als protected final Neutral() zu definieren - damit könnten Unterklassen deine Implementierung nicht mehr überschreiben.
 

Leroy42

Top Contributor
Andrey hat gesagt.:
ja, sicher, wenn man zurechnungsfähig ist, kann man damit sicherlich vernünftig programmieren. Aber dann kann schneller etwas schief gehen, wenn jemand, der keinen Plan hat, irgendetwas damit anstellt.

Jemand der keinen Plan hat, sollte aus meiner Sicht gar nicht programmieren!

:cool:
 

0x7F800000

Top Contributor
Ich wusste gar nicht, dass du deinen Job wechseln willst *SCNR* ;) !?
Stellt euch vor, alle jemals erschaffene private Hilfsmethoden werden plötzlich sichtbar.
Dann habt ihr auf einmal auch keinen Plan was los ist und wozu ihr den ganzen mist eigentlich braucht und ob ihr das überhaupt braucht, oder ob das als hilfsfunktion gedacht war, die nicht von anderen verwendet werden soll. Da werden alle ganz schnell zwar nicht den job, dafür aber die sprache wechseln wollen.

aber das argument mit IDE's, die mir eine dreimal so lange liste an methoden anbieten würden, als nötig, das war eigentlich wichtiger als das argument mit "plan" usw...
 

The_S

Top Contributor
Steht bestimmt schon in der Witzeecke ... Aber für dich nochmal (auch wenn er ja eigentlich schon dasteht):

Was ist gemein?

Zehn Kinder in einer Mülltonne.

Und was ist noch viel gemeiner?

Ein Kind in zehn Mülltonnen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Methoden abstract static Methode Allgemeine Java-Themen 8
L Vererbung Using @Autowired in Abstract Classes Allgemeine Java-Themen 4
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
S Frage zu abstract Allgemeine Java-Themen 5
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
G Abstract class Stillfrage Allgemeine Java-Themen 4
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
M abstract Methode aufrufbar? Allgemeine Java-Themen 3
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
M ist "public abstract class * extends" möglich? Allgemeine Java-Themen 2
T abstract - interface Unterschied Allgemeine Java-Themen 22
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B frage zu "file.renameTo()" bzw. abstract path allg Allgemeine Java-Themen 8
S static mit abstract und in interface Allgemeine Java-Themen 10
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
A Vererbung Selbstreferenzparameter Allgemeine Java-Themen 14
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
S MVC - Vererbung Allgemeine Java-Themen 4
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben