Modificateur d'accès | Accessible | Symboles dans les diagrammes de classes |
---|---|---|
public | De partout | + |
protected | Classes et sous-classes dans le même package | # |
Cours dans le même forfait | ~ | |
private | Classe actuelle | - |
L'accès à partir d'emplacements non autorisés entraînera une ** erreur de compilation **
・ ** Classe ** (pour déterminer si elle est accessible à partir d'un autre forfait) · Méthode ・ Collection (ArrayList) ·champ
L'interface elle-même est implicitement considérée comme ** publique ** car l'interface est ** une condition préalable à l'héritage ** → Méthodes pouvant être définies dans l'interface -Dans le cas de la ** méthode abstraite **, elle est implicitement interprétée comme ** public , abstract (public, abstract peut être omis). -Si ** a une implémentation, il doit s'agir d'une ** méthode statique ** ou ** méthode defalt ** ( Aucune restriction sur les modificateurs d'accès, privé est également possible **)
→ Champs pouvant être définis dans l'interface -Variable statique (** public uniquement ) ・ Constante ( public uniquement **) -Les variables d'instance ne peuvent pas être définies
** [Méthode concrète de classe qui implémente l'interface] **
Le modificateur d'accès de la méthode abstraite ** définie dans l'interface et de la méthode concrète ** qui implémente la méthode abstraite dans la classe qui implémente l'interface doit être ** le même modificateur d'accès **. ..
Exemple) * Une erreur de compilation s'est produite
interface A(){
void doSomething(); //Méthode abstraite Inderface. Interprété implicitement comme public
}
B implements A(){
protected void doSomething(){ //Erreur de compilation. Le modificateur d'accès doit être "public", comme la méthode abstraite de l'interface
//En traitement
}
}
Les classes abstraites (qualifiées par abstract) sont implicitement considérées comme ** publiques ** car les classes abstraites sont des ** hypothèses héritées **
→ Méthodes pouvant être définies dans des classes abstraites -Dans le cas d'une méthode abstraite, il est nécessaire de la modifier avec ** abstract **. Puisque la méthode abstraite est une méthode de ** prémisse à remplacer **, ** le modificateur d'accès peut être défini sur une valeur autre que privée ** -Pour les méthodes concrètes, les modificateurs d'accès peuvent être définis librement
→ Champs pouvant être définis dans des classes abstraites ・ Aucune restriction sur les paramètres
** * Le modificateur d'accès lors du remplacement d'une méthode doit être le même que la méthode d'origine ou les restrictions doivent être assouplies **
Exemple)
interface A {
void doSomething();
}
abstract class B implements A {
public abstract void doSomething(); //L'interface peut être implémentée avec des méthodes abstraites. Les modificateurs d'accès sont les mêmes que les méthodes d'interface
}
class C extends B {
public void doSomething(){ //Remplacez la méthode abstraite.
System.out.println("Faire quelque chose");
};
}
public class Main {
public static void main(String[] args) {
C example = new C();
example.doSomething();
}
}
Recommended Posts