L'héritage permet de créer une hiérarchie de classes où les classes enfant héritent des caractéristiques de la classe parente. Cela permet de réutiliser le code existant et de créer des classes plus spécialisées.
En Java, l'héritage est réalisé en utilisant le mot-clé 'extends'. Par exemple, si nous avons une classe Animal et une classe Chien, nous pouvons déclarer la classe Chien comme suit :
public class Chien extends Animal {
// code spécifique aux chiens
private String race;
public Chien(String nom, int age, String race){
super(nom,age); // utilisation du constructeur de la class mère (Animal)
this.race = race;
}
}
Dans cet exemple, la classe Chien hérite des attributs et des méthodes de la classe Animal.
L'implémentation est réalisée en utilisant le mot-clé 'implements'. Par exemple, si nous avons une interface Forme et une classe Cercle, nous pouvons déclarer la classe Cercle comme suit :
class Cercle implements Forme {
// implémentation des méthodes spécifiées par l'interface Forme
}
Dans cet exemple, la classe Cercle doit fournir une implémentation pour toutes les méthodes définies dans l'interface Forme.
En Java, la généricité est réalisée en utilisant les types génériques. Un type générique est un paramètre de type qui est spécifié lors de la déclaration d'une classe, d'une interface ou d'une méthode. Par exemple, la classe ArrayList peut être utilisée pour stocker des objets de n'importe quel type :
public class Boite<T>{
private T nom;
}
//AUTRES EXEMPLES DE GENERICITE AVEC LA CLASSE ARRAYLIST
ArrayList<String> listeDeMots = new ArrayList<>();
listeDeMots.add("Bonjour");
listeDeMots.add("Monde");
ArrayList<Integer> listeDeNombres = new ArrayList<>();
listeDeNombres.add(42);
listeDeNombres.add(1337);
Dans cet exemple, nous utilisons les types génériques <String> et <Integer> pour spécifier le type des éléments stockés dans les listes.