Cours les package et la visibilité en Java, tutoriel & guide de travaux pratiques en pdf.
Le DownCast
En java, il est possible de revenir du type déclaré vers un sous type du type réel, cela consiste à utiliser le down cast. Par exemple, si on crée une poule qui est déclarée comme un animal
Animal a = new Poule();
Le type réel de m est Poule son type déclaré est Animal. On peut revenir vers le type Poule en utilisant le down cast.
Poule p = (Poule) a;
Ou bien encore la considérer comme un Mammifère.
Mamifère m = (Mammifère) a;
Dans le cas, où le type réel de l’objet n’est pas compatible avec celui du down cast, une exception sera levée. Le down cast permet donc de revenir vers un sous type du type réel en bénéficiant ainsi des services présents dans l’interface fonctionnelle publique du sous type.
La Classe Object
Il existe en Java, une unique racine pour l’héritage qui est appelé la classe Object. Toute classe hérite du type et du code de la classe Object. Comme pour exister une interface doit être implémenté par une classe, on peut considérer que toute interface hérite de l’interface fonctionnelle de Object.
La classe Object permet donc de présenter le comportement minimal de tout objet ainsi que le code par défaut pour ce comportement minimal. Nous ne nous intéresserons qu’ à certains des services
Dans ce cas deux objets sont égaux si ils référencent le même objet physique. C’est à dire que deux objets sont égaux si il s’agit du même objet. On peut avoir un besoin moins restrictif de l’égalité de deux objets. Par exemple, deux objets de type Point peuvent être deux objets différents mais à un moment donné ils peuvent avoir les mêmes coordonnées dans un repère. Dans ce cas, on peut considérer que deux points sont égaux si ils ont les mêmes coordonnées. Le code pour la classe Point2D est alors le suivant:
public boolean equals(Object o) {
Point2D tmp = (Point2D) o;
return this.getX() == tmp.getX() && this.getY() == tmp.getY();
}
Ou aussi pour une formeCentre
public boolean equals(Object o) {
FormeCentre tmp = (FormeCentre) o;
return tmp.centre.equals(o.centre);
}
Le service toString() permet d’afficher des informations sur un objet, par défaut il affiche la classe et la clef d’indentification de l’objet (clef de hashage). Si on veut par exemple afficher des informations complémentaires le code peut alors être :.
public String toString()
{
String addInfo = « Des informations complémentaires »; return super.toString() + addInfo;
}
Enfin le dernier service est clone(). Ce service est protected et il doit retourner un nouvel objet
identique à l’objet à dupliquer. Par défaut, si on veut dupliquer un objet, il faut explicitement la redéfinir dans la classe et la déclarer comme publique. Par exemple,
public Object clone()
{
return super.clone();
}
Le comportement par défaut de clone au niveau de object, consiste à allouer une place mémoire équivalente à celle définit par le type réel de l’objet. Puis ensuite, il effectue une copie bit à bit de l’objet à recopier vers l’objet copie. Pour les types primitifs cela ne pose pas de problème par exemple pour un objet de type Point2D. Le comportement suivant est identique à celui de clone.
public Object clone()
Polymorphisme, la classe Object, les package et la visibilité en Java
Polymorphisme
Le DownCast
La Classe Object
Factorisation de Code
La notion de package
La visibilité en Java