Note #2 — Java
Programmation Orientée Objet
Classes, objets, héritage, polymorphisme, encapsulation
1. Classes et Objets
Une classe est un modèle (blueprint). Un objet est une instance de cette classe créée avec new.
public class Animal {
private String nom; // attribut encapsulé
private int age;
public Animal(String nom, int age) { // constructeur
[Link] = nom;
[Link] = age;
}
public String getNom() { return nom; } // getter
public void setNom(String n) { nom = n; }// setter
public void sePresenter() {
[Link]("Je suis " + nom + ", " + age + " ans.");
}
}
Animal a = new Animal("Rex", 3);
[Link](); // Je suis Rex, 3 ans.
2. Encapsulation & Modificateurs d'accès
Modificateur Classe Package Sous-classe Partout
private ✓ ✗ ✗ ✗
(défaut) ✓ ✓ ✗ ✗
protected ✓ ✓ ✓ ✗
public ✓ ✓ ✓ ✓
3. Héritage (extends)
public class Vehicule {
protected String marque;
public Vehicule(String m) { marque = m; }
public void info() { [Link](marque); }
}
public class Voiture extends Vehicule {
private int portes;
public Voiture(String m, int p) {
super(m); // appel du constructeur parent
portes = p;
}
@Override
public void info() {
[Link]();
[Link]("Portes : " + portes);
}
}
4. Polymorphisme
Animal[] animaux = { new Chien("Rex"), new Chat("Mimi") };
for (Animal a : animaux) {
[Link](); // méthode de la vraie sous-classe appelée
}
// instanceof pour vérifier le type
if (animaux[0] instanceof Chien d) { // Java 16 pattern matching
[Link]();
}
5. Classe abstraite vs Interface
Classe abstraite
public abstract class Forme {
public abstract double surface(); // méthode abstraite
public void afficher() { [Link]("S=" + surface()); }
}
public class Cercle extends Forme {
private double r;
public Cercle(double r) { this.r = r; }
public double surface() { return [Link] * r * r; }
}
Interface
public interface Deplacable {
void deplacer(int x, int y); // abstract implicite
default void arreter() { [Link]("Stop"); }
}
// Une classe peut implémenter PLUSIEURS interfaces
public class Robot implements Deplacable, Serializable { ... }
■ Une classe ne peut hériter que d'UNE seule classe, mais peut implémenter plusieurs interfaces.