Heim >Java >javaLernprogramm >Eine detaillierte Einführung in die Berechtigungsprobleme geerbter Klassen in Java
Es gibt ein Problem, das in Java leicht übersehen wird, und zwar die Beziehung zwischen den Berechtigungen geerbter Klassen und den Berechtigungen von Basisklassen. Denn wenn Sie geerbte Klassen verwenden, müssen Sie möglicherweise selten den Zugriffskontrollcharakter der Basisklasse ändern, sondern den Zugriffskontrollcharakter der Basisklasse direkt verwenden.
Wenn die Basisklasse eine private Attributmethode hat, kann die Unterklasse in „geschützt“ geändert werden? Wenn sie geschützt ist, kann die Unterklasse in „öffentlich“ oder „privat“ geändert werden? Schauen wir uns als nächstes dieses Problem an.
Empfohlene verwandte Video-Tutorials: Java-Lehrvideo
1 Die Basisklassenmethode ist privat
Zuallererst: Wenn die Basisklasse Die Attributmethode ist privat. Kann die Unterklasse dann in geschützt oder öffentlich geändert werden? Die Antwort ist nein. Diese Antwort kann mit einer kleinen Begründung geschlossen werden. Da die Attributmethode der Basisklasse privat ist, ist sie für die Unterklasse nicht sichtbar geändert werden? Was ist mit dem Steuersymbol?
Wir können einen Code verwenden, um dieses Problem zu überprüfen:
/*BaseClass.java*/ public class BaseClass { private void test() {} } /*ExtendClass.java*/ public class ExtendClass extends BaseClass { //@Override protected void test() {} }
Wenn die Anmerkungen aus dem obigen Code entfernt werden, wird ein Fehler gemeldet, der darauf hinweist, dass die Methode nicht gefunden werden kann, weil Die Methode der Basisklasse ist privat. Es gibt kein Problem, wenn Sie die Annotation entfernen. Zu diesem Zeitpunkt sind die test()-Methode der Unterklasse und die test()-Methode der Basisklasse jedoch zwei völlig unabhängige Methoden.
2. Die Basisklassenmethode ist freundlich
Wenn die Basisklassenmethode freundlich ist, was die Standardberechtigung ist, gibt es zwei Situationen, eine ist das Kind Die Klasse und die Basisklasse befinden sich im selben Paket. Zum einen befinden sich die Unterklasse und die Basisklasse nicht im selben Paket. Wenn sich die Unterklasse und die Basisklasse im selben Paket befinden, kann das Berechtigungskontrollsymbol auf geschützt oder öffentlich erweitert werden:
/*BaseClass.java*/ package demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo1; public class ExtendClass extends BaseClass { @Override protected void test() {} }
Die beiden oben genannten Klassen befinden sich unter dem Paket demo1 und der Code kann korrekt verwendet werden. Wenn sich die Unterklasse und die Basisklasse jedoch nicht im selben Paket befinden, ist die Situation anders:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { //@Override protected void test() {} }
Wenn sich die Unterklasse und die Basisklasse nicht im selben Paket befinden, können die Standardberechtigungen nicht erweitert werden Grund ist eigentlich derselbe wie privat. Die Klasse kann die Methoden der Basisklasse nicht sehen und kann daher die Berechtigungen der Methode nicht erweitern.
3. Die Basisklassenmethode ist geschützt
Wenn die Basisklassenmethode geschützt ist, kann die Unterklasse das Zugriffskontrollzeichen auf öffentlich erweitern:
/*BaseClass.java*/ package demo2.demo1; public class BaseClass { protected void test() {} } /*ExtendClass.java*/ package demo2; public class ExtendClass extends BaseClass { @Override public void test() {} }
4. Zusammenfassung
Tatsächlich ist es einfach, die folgende Richtlinie herauszufinden: Theoretisch sind Unterklassen Zugriffskontrollzeichen, die die Basisklasse erweitern können. Der Zugriffskontrollcharakter der Basisklasse kann jedoch nicht eingeschränkt werden und kann nur erweitert werden, wenn die Unterklasse die Basisklassenmethode sehen kann.
Wenn Sie weitere verwandte Tutorials erfahren möchten, besuchen Sie: Erste Schritte mit Java-Grundlagen
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in die Berechtigungsprobleme geerbter Klassen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!