Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
Quatre types de classes internes. . .
classe interne (inner class)
Une instance n’existe que dans une instance englobante. Tous les
membres de classe englobante lui sont accessibles (r´ef´erences : this et
ClasseEnglobante.this).
Une interface ne peut ˆetre de ce type car non instanciable
classe interne static (nested class)
Elle acc`ede aux membres statiques de la classe englobante. Elle ne
poss`ede pas de r´ef´erence sur l’objet englobant l’ayant cr´e´e
Classes abstraites, Interfaces et classes imbriqu´ees 17 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
classe locale
Ce type de classe est d´eclar´e dans une m´ethode et a le mˆeme
comportement qu’une classe interne. Sa port´ee est locale au bloc, elle
peut acc´eder aux membres de la classe englobante et uniquement aux
variables locales final du bloc.
classe anonyme
Il s’agit d’une classe locale ne portant pas de nom (h´erite d’une classe
abstraite ou non, ou impl´emente une interface). Elle est instanci´ee au
moment de sa d´eclaration.
Elle est utilis´ee lors d’un besoin unique.
Classes abstraites, Interfaces et classes imbriqu´ees 18 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
ListeChainee.java
package fr.insarouen.asi.prog.cours3;
public class ListeChainee {
private Noeud tete;
public static class Noeud {
private Object valeur;
private Noeud suivant;
public Noeud(Object valeur) {
this .valeur = valeur;
}
public Noeud(Object valeur, Noeud suivant) {
this .valeur = valeur;
this .suivant = suivant;
}
public void setValeur(Object valeur) {
this .valeur = valeur;
}
public Object getValeur() {
return valeur;
}
public Noeud getNoeudSuivant() {
return suivant;
}
public void setNoeudSuivant(Noeud suivant) {
this .suivant = suivant;
}
}
public ListeChainee() {
}
public ListeChainee(Object valeur) {
tete = new Noeud(valeur);
}
public Noeud getTete() {
return tete;
}
public void ajouterEnTete(Object valeur) {
tete = new Noeud(valeur, tete);
}
public Object retirerTete() {
Object obj=tete.getValeur();
tete=tete.getNoeudSuivant();
return obj;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("ListeChainee : ");
Noeud courant = tete;
while (courant != null) {
sb.append(courant.getValeur());
sb.append(" / ");
courant = courant.getNoeudSuivant();
}
return sb.toString();
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 19 / 21
Plan Classes abstraites Interface Classes/Interfaces internes Principes Exemple : interne static Exemple : interne
Jeu.java ...
package fr.insarouen.asi.prog.cours3;
public class Jeu {
private Plateau plateau;
private Personnage[] personnages;
private int nbPersonnages;
private interface Joueur {
public void jouer();
}
public abstract class Personnage {
protected int pv;
protected int vitesse;
public Personnage(int pv, int vitesse) {
this .pv = pv;
this .vitesse = vitesse;
}
public void setVitesse(int vitesse) {
this .vitesse = vitesse;
}
public int getVitesse() {
return vitesse;
}
public void setPointVie(int pv) {
this .pv = pv;
}
public int getPointVie() {
return pv;
}
}
private class Monstre extends Personnage
implements Joueur {
public Monstre() {
super(5, 10);
}
public void jouer() {
System.out.println("Gnark gnark gnark !!!");
}
}
private class Homme extends Personnage
implements Joueur {
public Homme() {
super(10, 4);
}
public void setVitesse(int vitesse) {
if (plateau.auBord(this))
super.setVitesse(0);
else
super.setVitesse(vitesse);
}
public void jouer() {
System.out.println("Je me prom`ene");
}
}
Classes abstraites, Interfaces et classes imbriqu´ees 20 / 21