Résumé syntaxique intermédiaire #
Quatre niveau de visibilité (appelé modifiers en anglais) #
private
: accès possible à l’intérieur de la classeprotected
: accès possible pour les sous-classes- par défaut (si aucun mot clé non précisé) : accès possible dans le package où se trouve la classe
public
: accès possible à l’extérieur
Ces modifiers_ s’appliquent aux méthodes, aux champs, aux interfaces et aux classes. Le tableau suivant montre les accès aux membres:
modifier | classe | sous-classe | package | monde extérieur |
---|---|---|---|---|
private |
Oui | Non | Non | Non |
protected |
Oui | Oui | Non | Non |
non précisé (de package) | Oui | Oui | Oui | Non |
public |
Oui | Oui | Oui | Oui |
Les interfaces #
Premier choix d’abstraction ; à privilégier au classe abstraite. Permettent également de réduire la duplication de code.
Caractéristiques #
Elles peuvent contenir:
- des méthodes abstraites (non implémentée, devant être redéfinie)
- des constances (Java 7)
- des méthodes statiques (Java 8)
- des méthodes par défaut (concrète) (Java 8)
- des méthodes privées (Java 9)
Autres caractéristiques:
- elles ne peuvent décrire un état ou une transition d’états
- pas de constructeur
- pas de champs
- ne peuvent être instanciées
- un type peut hériter de plusieurs interfaces
Il est dès lors possible, d’implémenter une méthode contrète à l’aide d’une méthode abstraite !
interface ContainerOfThings {
List<Thing> allThings(); // abstraite
default int numberOfThings() { // conctrète
return allThings().size(); // utilise la méthode abstraite
}
}
Les classes abstraites #
Choix d’abstraction lorsqu’il est nécessaire de décrire une logique impliquant un changement d’état.
Caractéristiques #
- elles peuvent contenir
- des constructeurs
- des champs
- ne peuvent être instanciées
- un type peut hériter que d’une seule classe
Particularités #
- Les méthodes d’une interface sont publiques si le modifier n’est pas précisé. Elles ne peuvent pas avoir des méthodes de packages ou protected.
- Il ne peut exister qu’une classe/interface publique par fichier. Les autres ne peuvent pas avoir de modifier
public
et sont donc uniquement visible pour lepackage
. - Une classe/interface ne peut pas être
protected
. - Une classe/interface interne peut se voir attribuer les 4 niveaux de visibilités par contre.
Le mot clé final
#
- indique qu’une référence est constante (
final int i = 42
) - indique qu’une classe ne peut pas être héritée (
public final MyClass {...}
) - indique qu’une méthode ne peut pas être redéfinie (
public final myMethod() {...}
)
Le mot clé static
#
- indique qu’un membre appartient au type plutôt qu’à une instance de celui-ci
- indique qu’un champ est partagé par toutes les instances d’une classes
- un type interne peut être statique si un objet de celui-ci ne possède aucune référence de l’objet englobant (s’il ne référence aucun membre non-statique de la classe englobante).