Zugriffsmodifikator | Zugänglich | Symbole in Klassendiagrammen |
---|---|---|
public | Von überall | + |
protected | Klassen und Unterklassen im selben Paket | # |
Klassen im selben Paket | ~ | |
private | Aktuelle Klasse | - |
Der Zugriff von nicht autorisierten Orten führt zu einem ** Kompilierungsfehler **
・ ** Klasse ** (um festzustellen, ob von einem anderen Paket aus darauf zugegriffen werden kann) · Methode ・ Sammlung (ArrayList) ·Feld
Die Schnittstelle selbst wird implizit als ** öffentlich ** betrachtet, da die Schnittstelle ** eine Voraussetzung für die Vererbung ist ** → Methoden, die in der Schnittstelle definiert werden können -Im Fall der ** abstrakten Methode ** wird sie implizit als ** öffentlich , abstrakt interpretiert (öffentlich, abstrakt kann weggelassen werden). -Wenn ** eine Implementierung hat, muss es sich um eine ** statische Methode ** oder eine ** Defalt-Methode ** handeln ( Zugriffsmodifikatoren sind unbegrenzt, privat ist auch möglich **)
→ Felder, die in der Schnittstelle definiert werden können -Statische Variable (** nur öffentlich ) ・ Konstante ( nur öffentlich **) ・ Instanzvariablen können nicht definiert werden
** [Konkrete Methode der Klasse, die die Schnittstelle implementiert] **
Das Zugriffsqualifikationsmerkmal der in der Schnittstelle definierten abstrakten Methode ** und die konkrete Methode **, die die abstrakte Methode in der Klasse implementiert, die die Schnittstelle implementiert, müssen ** dasselbe Zugriffsqualifikationsmerkmal ** sein. ..
Beispiel) * Ein Kompilierungsfehler ist aufgetreten
interface A(){
void doSomething(); //Inderface abstrakte Methode. Implizit als öffentlich interpretiert
}
B implements A(){
protected void doSomething(){ //Kompilierungsfehler. Der Zugriffsmodifikator muss "öffentlich" sein, genau wie die abstrakte Methode der Schnittstelle
//wird bearbeitet
}
}
Abstrakte Klassen (mit Abstract qualifiziert) werden implizit als ** öffentlich ** betrachtet, da abstrakte Klassen ** geerbte Annahmen ** sind
→ Methoden, die in abstrakten Klassen definiert werden können -Für abstrakte Methoden ist eine Änderung mit ** abstract ** erforderlich. Da es sich bei der abstrakten Methode um eine Methode handelt, bei der die Prämisse überschrieben werden muss, kann der Zugriffsmodifikator auf einen anderen als den privaten Wert gesetzt werden. -Für konkrete Methoden können Zugriffsmodifikatoren frei eingestellt werden
→ Felder, die in abstrakten Klassen definiert werden können ・ Keine Einschränkungen bei den Einstellungen
** * Der Zugriffsmodifikator beim Überschreiben einer Methode sollte mit der ursprünglichen Methode identisch sein, oder die Einschränkungen sollten gelockert werden **
Beispiel)
interface A {
void doSomething();
}
abstract class B implements A {
public abstract void doSomething(); //Die Schnittstelle kann mit abstrakten Methoden implementiert werden. Zugriffsmodifikatoren sind dieselben wie Schnittstellenmethoden
}
class C extends B {
public void doSomething(){ //Abstrakte Methode überschreiben.
System.out.println("Etwas tun");
};
}
public class Main {
public static void main(String[] args) {
C example = new C();
example.doSomething();
}
}
Recommended Posts