11
Mickaël Martin Nevot 30/11/2015 20:09 Cette œuvre de Mickaël Martin Nevot est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage à l'Identique 3.0 non transposé. Cette œuvre de Mickaël Martin Nevot est mise à disposition selon les termes de la licence Creative Commons Attribution Pas d'Utilisation Commerciale Partage à l'Identique 3.0 non transposé. V1.0.0 CM4-2 : Java, polymorphisme

CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Mickaël Martin Nevot

30/11/2015 20:09

Cette œuvre de Mickaël Martin Nevot est mise à disposition selon les termes de la

licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage à l'Identique

3.0 non transposé.

Cette œuvre de Mickaël Martin Nevot est mise à disposition selon les termes de la

licence Creative Commons Attribution – Pas d'Utilisation Commerciale – Partage à l'Identique

3.0 non transposé.

V1.0.0

CM4-2 : Java, polymorphisme

Page 2: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

I. Prés.

II. POO

III. Objet

IV. Java

V. Types

VI. Héritage

VII. Outils

VIII. Exceptions

IX. Polymorphisme

X. Thread

XI. Avancé

Java Mickaël Martin Nevot 1/10

Page 3: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Surclassement (à la compilation) :

Vu comme un objet du type de la référence

Fonctionnalités restreintes à celles du type de la référence A myObj = new B( … );

Liaison dynamique (à l’exécution) :

Méthode de la classe effective de l’objet qui est exécutée myObj.meth1( … );

Downcasting :

Libère les fonctionnalités restreintes par le surclassement ((B) myObj).meth2( … );

Polymorphisme

Java Mickaël Martin Nevot

A

B

2/10

Page 4: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Surclassement (à la compilation) :

Vu comme un objet du type de la référence

Fonctionnalités restreintes à celles du type de la référence A myObj = new B( … );

Liaison dynamique (à l’exécution) :

Méthode de la classe effective de l’objet qui est exécutée myObj.meth1( … );

Downcasting :

Libère les fonctionnalités restreintes par le surclassement ((B) myObj).meth2( … );

Polymorphisme

Java Mickaël Martin Nevot

A : référence

B : classe effective

meth1(…) est une méthode de A, redéfinie par B :

c’est celle de B qui est exécutée !

Transtypage

A

B

3/10

Page 5: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

public class Vehicle {

… void move() { System.out.println("Avec deux ou quatre roues !"); } } … public class Bike extends Vehicle { …

void move() {System.out.println("Avec deux roues !"); }

void lean() {System.out.println("Je me penche !"); } }

public static void main(String[] args) { Vehicle bike = new Bike( … ); // Surclassement.

bike.move(); // Liaison dynamique.

// Affichage : Avec deux roues !

bike.lean(); // Erreur !

//(Vehicle n’a pas de méthode lean()).

((Bike) bike).lean(); // Downcasting.

// Affichage : Je me penche ! }

Polymorphisme

Java Mickaël Martin Nevot

Vehicle

Car

ER Vehicle

Ambulance

Bike

4/10

Page 6: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Ne peut pas être instanciée (mais constructeur[s] possible[s])

Si une seule méthode est abstraite, la classe l’est aussi

Mot clef abstract :

Classe : public abstract class MyClass { … }

Méthode : public abstract void meth1( … );

Classe abstraite

Java Mickaël Martin Nevot

Pas de corps

Vehicle

Car Bike

La classe Vehicle est abstraite :

il n’y a pas d’instance de Vehicle mais

des instances de Car ou de Bike

5/10

Page 7: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Une interface donne son type aux classes l’implémentant

Mot clef interface (pas abstract) : public interface MyInterface { … };

Mot clef implements : public class MyClass implements MyInterface1 { … } public class MyClass1 implements MyInterface1, MyInterface2 … { … } public class MyClass2 extends MySuperClass implements MyInterface1 … { … }

Les interfaces peuvent se dériver (mot clef extends) public interface MyInterface2 extends MyInterface1 { … };

Interface

Java Mickaël Martin Nevot 6/10

Page 8: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Classe locale ou interne : public class MyClass { … class MyLocalClass { … } }

Classe anomyme : MyAnonymousClass myObj = new MyAnonymousClass() { … };

Bytecode :

Classe : MyClass.class

Interne : MyClass$MyLocalClass.class

Anonyme : MyClass$1.class

Classes interne/anonyme

Java Mickaël Martin Nevot

Attention : il s’agit d’une instruction !

7/10

Page 9: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Polymorphisme paramétrique de type

Comportement unique pour des types polymorphes

Un peu comme les templates C++ :

Une seule copie du code : compilé une fois pour toutes

Notation : <Type1>, <Type2, Type3>, etc.

MyClass<String> myObj = new MyClass<String>(); public class MyList<B extends A, C> MyList<MyClass, Date> list = new MyList<MyClass, Date>();

Générique (Java 5)

Java Mickaël Martin Nevot

Classes typées

à la compilation

8/10

Page 10: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Wildcard : ? void myMeth1(List<? extends MyClass> a) { for(MyClass p : a) { myMeth12(p); } }

Variance (limite de portée) : & final class MyClass<A extends Comparable<A> & Cloneable<A>, B extends Comparable<B> & Cloneable<B>> implements Comparable<MyClass<A, B>>, Cloneable<MyClass<A,B>> { … }

Génériques (Java 5)

Java Mickaël Martin Nevot

C

C’

Il ne peut y avoir

que des interfaces

après le premier &

Si C’ hérite d’une classe

C et G est un générique de

paramètre C alors :

il est faux de dire que

G<C’> hérite de G<C>

9/10

Page 11: CM4-2 : Java, polymorphisme Mickaël Martin Nevotmickael-martin-nevot.com/institut-g4/java/s13-cm4-2-java...Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions >

Prés. > POO > Objet > Java > Types > Héritage > Outils > Exceptions > Polymorphisme > Thread > Avancé V1.0.0

Auteur

Mickaël Martin Nevot

[email protected]

Carte de visite électronique

Cours en ligne sur www.mickael-martin-nevot.com

Relecteurs

Mickaël Martin Nevot

[email protected]

Carte de visite électronique

Crédits

Java Mickaël Martin Nevot

10/10