Vererbung Konstruktor |
21.01.2015, 19:32 | Auf diesen Beitrag antworten » | |||||
Mike04 | Vererbung Konstruktor Meine Frage: Hey, hier bin ich noch einmal :-) Bin gerade beim Thema Vererbung und wollte gerade eine Klasse ableiten. Jetzt bekomme ich die Fehlermeldung "Implicit super constructor is undefined for default constructor. Must define an explicit constructor. Muss denn in der vererbten Klasse der Konstruktor noch einmal neu definiert werden? Wie macht man sowas? Meine Ideen:
Vielen Dank |
|||||
|
||||||
21.01.2015, 19:38 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Wenn du nicht selbst einen Konstruktor erstellst, wird ein Defaultkonstruktor angelegt. Dieser nimmt keine Argumente entgegen. Mensch hat aber keinen solchen Konstruktor. Daher musst du bei Soldat auch selbst einen Konstruktor schreiben.
|
|||||
21.01.2015, 19:41 | Auf diesen Beitrag antworten » | |||||
Mike04 | Gut, dass du so schnell zur Stelle bist :-) Dankeschön ;-) |
|||||
21.01.2015, 19:51 | Auf diesen Beitrag antworten » | |||||
Karlito | Moin, der Code wird so nicht funktionieren, da der Konstruktor in Mensch nicht zugreifbar ist. super(name) schlägt somit fehl. Der Konstruktor muss beispielsweise protected sein (anstatt private). Private Konstruktoren verwendet man übrigens nur dann, wenn man ihn in einer statischen Methode verwendet. Es ist so nämlich nicht möglich new Mensch("Klaus"); aufzurufen. Eine bekannte verwendung von privaten Konstruktoren ist das Singleton-Pattern. Dieses stellt sicher, dass es von einer Klasse nur eine einzige Instanz gibt. Wenn man gar nicht will, dass Klassen instanziiert werden können, wird üblicherweise abstract genutzt und kein privater Konstruktor. Gruß, Karlito |
|||||
Anzeige | ||||||
|
||||||
21.01.2015, 19:56 | Auf diesen Beitrag antworten » | |||||
Mike04 | Danke für den Hinweis. Das habe ich auch gesehen und dann auf protected abgeändert. Gibt es zwischen protected und private eigentlich einen großen Unterschied? |
|||||
21.01.2015, 20:09 | Auf diesen Beitrag antworten » | |||||
Karlito | Offensichtlich ja (müsstest du doch gerade gemerkt haben), da mit private gekennzeichnete Methoden, Konstruktoren und Felder von außerhalb der Klasse nicht zugreifbar sind... Protected regelt die Zugreifbarkeit so, dass erbende Klassen zugreifen können. Dazu kommen noch public und default. Siehe hier. Edit: es ist natürlich die Frage, was man als groß ansieht. Ich persönlich finde den Unterschied zwischen protected und default kleiner... Gruß, Karlito |
|||||
21.01.2015, 20:17 | Auf diesen Beitrag antworten » | |||||
Mike04 | Ich denk's mir auch gerade, dass die erste Frage bezüglich des Unterschieds sinnlos war. Sorry dafür Dass durch das Keyword protected dann aber die erbende Klasse Zugriff auf die Methoden hat, wusste ich nicht und erklärt so einiges :-) Danke |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |