Niveau intermédiaire

Résumé syntaxique intermédiaire #

Quatre niveau de visibilité (appelé modifiers en anglais) #

  • private : accès possible à l’intérieur de la classe
  • protected : 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 le package.
  • 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).











comments powered by Disqus