04-Cours_JAVA_2024
04-Cours_JAVA_2024
04-Cours_JAVA_2024
Abstract Classes
Interfaces
1
Un peu de Géométrie
(x, y)
La position d'un
rectangle dans le plan
est donnée par son
coin supérieur gauche
(x, y)
La position d'un cercle
dans le plan est
donnée par le coin
supérieur gauche de
sa boîte englobante
2
Un peu de Géométrie Abstract Classes
3 3
Que représente Shape, anyway??
Abstract Classes
Triangle Circle
base
Faire de la classe abstract!
height radius
area() area()
public abstract class Shape {
… Règle Syntaxique : si la
} classe C est abstract, la new-
expression new C(…) ne peut
pas être utilisée! 4
sumAreas dans la classe Shape Abstract Classes
Dans une classe abstract Shape, une fonction abstract area est
requise dans toutes les sous-classes :
Syntaxe :
Si une méthode a le mot clé abstract dans sa déclaration,
utilisez point-virgule au lieu du corps de la méthode.
8
Abstract : Sommaire Abstract Classes
16
Interfaces
public abstract class Stack { public interface Stack {
public abstract boolean isEmpty(); boolean isEmpty();
public abstract void push(int k); void push(int k);
public abstract int pop(); int pop();
} }
class Animal { … }
class Mammal extends Animal { ... }
Object
class Bird extends Animal { … }
class Human extends Mammal {. … }
class Dog extends Mammal { … }
class Parrot extends Bird { … }
Animal
Mammal Bird
Animal
Mammal Speaker
Human
21
Voici à quoi ressemble un object de la classe
Human
Human h= new Human(); h, ob, a, m, et s tous
Object ob= h; pointe au même objet.
Animal a= (Animal) ob;
Mammal m= h;
Speaker s= h; Un objet peut être (et est)
casté à toute “partition”
Object dans celui-ci : h, ob, a, m
et s .
Upward casts : peut être
Animal
implicite ; inséré par Java
Mammal Speaker Downward casts : doit
être explicite
Human
22
Exemple d’utilisation réelle d’une interface :
sorting
Considérez un array de Shapes : on veut les trier par area croissante
Considérez un array de ints : on veut les trier par ordre croissant
Considérez un array de Dates : on veut les mettre dans un ordre chronologique
23
Interface Comparable
Package java.lang contient cette interface
24
Exemple réel : Comparable
On implémente Comparable dans la classe Shape
public abstract class Shape implements Comparable {
…
/** Return area of this shape */
public abstract double area() ;
Si c ne peut être
/** See previous slide*/ casté à Shape, une
public int compareTo(Object c) { ClassCastException
Shape s= (Shape) c; est thrown
double diff= area() – s.area();
return diff == 0 ? 0 : (diff < 0 ? -1 : 1);
}
} 25
Arrays.sort a cette méthode
26
A quoi ressemble un objet d’une sous classe
public abstract class Shape implements Comparable { … }
public class Circle extends Shape { … }
public class Rectangle extends Shape { … }
Quand la procedure sort compare les éléments d’un Shape
array, chaque élément est une Shape. La procédure sort les voit
de la perspective Comparable!
Object Object
Comparable Comparable
Shape Shape
Circle Rectangle
27
Abstract Classes vs. Interfaces
Similitudes :
● On peut pas les instancier
● On doit implémenter les méthodes abstract
● Utiliser les interfaces pour définir “abstract data types”
○ (e.g. List, Set, Stack, Queue, etc)
28
28
Operateur instanceof vs getClass