Warum funktioniert ein Java-Konstruktor haben, öffentlich oder geschützt für eine Klasse erweitert werden, die außerhalb seines Pakets?
Das folgende ist meine ProtectedConstructor.java
source code:
package protectCon;
public class ProtectedConstructor{
public int nothing;
ProtectedConstructor(){
nothing = 0;
}
}
Und folgende ist die UsingProtectedCon.java
Quelle:
package other;
import protectcon.ProtectedConstructor;
public class UsingProtectedCon extends ProtectedConstructor{ //**Line 4**
public static void main(String... a) {
}
}
Wenn ich kompilieren UsingProtectedCon.java
, bekomme ich Fehler in Zeile 4 oben. Es sagt, dass ProtectedConstructor() ist nicht öffentlich ; also kann nicht zugegriffen werden, außerhalb des Pakets.
Jedoch, da meine Klasse public ist, sollte ich nicht in der Lage sein, um es zu erweitern außerhalb des Pakets. Ich bin sowieso nicht die Schaffung einer Instanz.
Nun, wenn ich den Konstruktor von ProtectedConstructor
Klasse als public
oder protected
dann wird der code kompiliert einwandfrei mit keine Fehler.
Also warum ist es notwendig, auch für den Konstruktor public
oder protected
, und nicht nur die Standard-Zugang?
InformationsquelleAutor whitehat | 2011-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, erstreckt sich eine Klasse außerhalb des Pakets muss über einen Konstruktor verfügen, ist
public
oderprotected
da in Java jeder Konstruktor muss der Aufruf eines Konstruktors von der übergeordneten Klasse.Da gibt es eine implizite
super()
call-in jeder Konstruktor, der nichtthis()
oder ein expliziter Aufrufsuper()
als Ihre erste Aussage. Und wenn Sie nicht geben Sie einen Konstruktor an alle Java-fügen Sie einen parameterlosen default-Konstruktor, so in der Tat der code wie folgt aussieht:Also in anderen Worten: Ihr code nicht kompilieren, weil der Aufruf
super()
in der default-Konstruktor kann nicht aufgelöst werden.InformationsquelleAutor Dave Webb
constructor
ist ein Mitglied der Klasse, wiefield
undmethod
so zugriffsmodifizierer gilt es auf die gleiche Art äpfel an alle member der Klassebeim erweitern der Klasse A in B , A ist der Standard-Konstruktor aufgerufen werden, vom B-Konstruktor implizit (wenn Sie nicht rufen Sie den überladenen Konstruktor)
Geben Sie Ihre
overloaded
InformationsquelleAutor Jigar Joshi
in Ihrer Klasse ProtectedConstructor definiert ist, mit Paket-eigener Zugang
Dies bedeutet, dass außerhalb des Pakets, die nicht gesehen, auch von den Klassen, die sich von Ihrem ProtectedConstructor Klasse
Definieren Sie den Konstruktor mit "geschützten" access modifier statt und Sie werden getan:
InformationsquelleAutor Mark Bramnik
Konstruktor ist nicht öffentlich. Standardbereich ist package-private.
InformationsquelleAutor Jakub Matczak
JLS 6.6.7 Ihre Frage beantwortet. Eine Unterklasse nur Zugriff auf ein protected-Elemente der übergeordneten Klasse, wenn es um die Umsetzung Ihrer Eltern. Sie können daher nicht instanziiert ein übergeordnetes Objekt in einer untergeordneten Klasse, wenn parent-Konstruktor ist geschützt und es ist in verschiedenen Paket.Da der default-Konstruktor der Unterklasse würde versuchen, rufen Sie Eltern-Konstruktor der Klasse ,Sie habe diesen Fehler.
Sehen diese SO ein Post foder details
InformationsquelleAutor Sandeep Pathak
zur Vermeidung aller Verwirrung es so machen.
Paket protectCon;
InformationsquelleAutor dku.rajkumar
Können Sie Konstruktoren sind public, protected (für interne verwendet) und auch privat.
Ein einfaches Beispiel ist die Zeichenkette die
public
Konstruktoren für den Allgemeinen Gebrauch und Paket-lokale Konstruktoren für den internen Gebrauch.Die ObjectOutputStream Klasse hat einen öffentlichen Konstruktor nimmt einen Ausgabestrom und eine
protected
Konstruktor kann nur verwendet werden, durch eine sub-Klasse.BTW: wenn du ein
abstract
Klasse, macht es Sinn machen, den Konstruktorpublic
als ob oft der Fall ist. 😉 Tipp: es ist das gleiche wieprotected
.InformationsquelleAutor Peter Lawrey
Wenn Kind Konstruktor, der die private Elternteil,die wir machen können, Kind-Instanz mit Konstruktor und werfe es vor die Eltern geben.
Also um zu verhindern, dass diese java-compiler ermöglicht es nicht, den Konstruktor zu Konstruktor haben, der die private Elternteil.
InformationsquelleAutor narek.gevorgyan