<!-- Slide number: 1 -->
LH ritage en Java
<!-- Slide number: 2 -->
Une classe Java d rive toujours d'un autre classe.
Quand rien n'est sp cifi , une classe h rite de la classe Object.
Pour sp cifier de quelle classe h rite une classe on utilise le mot-cl extends : class D extends B
La classe D d rive de la classe B. On dit que le classe B est la super classe, la classe de base, ou la classe m re de la classe d riv e D, et que D d rive de B, ou que D est une sous-classe de B
<!-- Slide number: 3 -->
B
La classe B est la super classe
La classe B est la classe m re
La classe D d rive de la classe B.
La classe D est une sous-classe
D
<!-- Slide number: 4 -->
Visibilit depuis les classes d riv es
class B{
private int a;
protected int b;
int c;
public int d;
}
class D extends B {
int x;
void f(){
b = &; }
}
int x;
void f(){
b = &; }
private int a;
protected int b;
int c;
public int d;
<!-- Slide number: 5 -->
| Modificateur | R le |
| --- | --- |
| public | Une variable, m thode ou classe d clar e public est visible par tous les autres objets. En POO, aucun attribut d'une classe ne devrait tre d clar e publique : il est pr f rable d' crire des m thodes pour la consulter et la modifier. |
| Friendly (N ant) | Si aucun modificateur n'est pr cis , la classe, m thode ou variable, sera visible par toutes les classes se trouvant dans le m me package. |
| Protected | Si une m thode ou un attribut est d clar protected, seules les m thodes pr sentes dans le m me package que cette classe ou ses sous classes pourront y acc der. Une classe ne peut pas tre qualifi e protected. |
| private | C'est le niveau de protection le plus fort. Les composants ne sont visibles qu' l'int rieur de la classe : ils ne peuvent tre modifi s que par des m thodes d finies dans la classe pr vues cet effet. Les attributs private sont lus et modifi s par les accesseurs: getters et les modificateurs: setters, qui, sont d clar s public, afin que tout le monde puisse les utiliser. |
<!-- Slide number: 6 -->
Package P2
Package P1
class C1 {
public int A ;
protected int B ;
int C ;
private int D
}
Publicité
class C3 {
}
class C4 extends C1 {
}
class C2 {
}
| Attribut | Classe C1 | Classe C2 | Classe C3 | Classe C4 |
| --- | --- | --- | --- | --- |
| A | | | | |
| B | | | | |
| C | | | | |
| D | | | | |
<!-- Slide number: 7 -->
Package P2
Package P1
class C1 {
public int A ;
protected int B ;
int C ;
private int D
}
class C3 {
}
class C4 extends C1 {
}
class C2 {
}
| Attribut | Classe C1 | Classe C2 | Classe C3 | Classe C4 |
| --- | --- | --- | --- | --- |
| A | X | X | X | X |
| B | | | | |
| C | | | | |
| D | | | | |
<!-- Slide number: 8 -->
Package P2
Package P1
class C1 {
public int A ;
protected int B ;
int C ;
private int D
}
class C3 {
}
class C4 extends C1 {
}
class C2 {
}
| Attribut | Classe C1 | Classe C2 | Classe C3 | Classe C4 |
| --- | --- | --- | --- | --- |
Publicité
| A | X | X | X | X |
| B | X | X | | X |
| C | | | | |
| D | | | | |
<!-- Slide number: 9 -->
Package P2
Package P1
class C1 {
public int A ;
protected int B ;
int C ;
private int D
}
class C3 {
}
class C4 extends C1 {
}
class C2 {
}
| Attribut | Classe C1 | Classe C2 | Classe C3 | Classe C4 |
| --- | --- | --- | --- | --- |
| A | X | X | X | X |
| B | X | X | | X |
| C | X | X | | |
| D | | | | |
<!-- Slide number: 10 -->
Package P2
Package P1
class C1 {
public int A ;
protected int B ;
int C ;
private int D
}
class C3 {
}
class C4 extends C1 {
}
class C2 {
}
| Attribut | Classe C1 | Classe C2 | Classe C3 | Classe C4 |
| --- | --- | --- | --- | --- |
| A | X | X | X | X |
| B | X | X | | X |
| C | X | X | | |
| D | X | | | |
<!-- Slide number: 11 -->
Remarque: Une r f rence une classe d riv e peut tre affect e une r f rence dune classe de base, linverse doit faire lobjet dune op ration de conversion de type ou cast :
Exemple:
class C1 {
Publicité
public int A ;
protected int B ;
int C ;
private int D
}
class C4 extends C1 {
& }
Class objC1 = new C1();
Class objC4 = new C4();
objC1 = objC4; // possible
objC4 = objC1; // interdit
objC4 = ( C4) objC1; // possible avec cast
<!-- Slide number: 12 -->
Red finition des m thodes
class B {
void m(){
System.out.println(" m de B");
}
}
class D extends B {
void m(){
System.out.println( " m de D"); }
}
Public Static void main(String Args[]){
B b = new B( );
D d = new D( );
b.m ( );
b = d;
b.m ( );
Affiche:
m de B
m de D
<!-- Slide number: 13 -->
Remarques :
Ne pas confondre la red finition avec la surcharge :
Red finition : m me type de retour et m mes param tres.
Surcharge : type de retour et param tres diff rents, les param tres au moins doivent tre diff rents.
Une classe d finie avec le modificateur dacc s final ne peut pas tre d riv e.
Une m thode d finie avec le modificateur dacc s final ne peut pas tre red finie dans les classes d riv es.
<!-- Slide number: 14 -->
V hicule
Vitesse
Nombre de passagers
Classe de base:
Attributs de V hicule
H ritage
Avion
Vitesse
Nombre de passagers
Nombre de moteurs
Publicité
Classe d riv e:
Attributs h rit s
Attributs propres Avion
<!-- Slide number: 15 -->
Constructeur
La classe d riv e doit prendre en charge la construction de la classe de base.
Pour construire un Avion, il faut construire d'abord un V hicule; Le constructeur de la classe de base (V hicule) est donc appel avant le constructeur de la classe d riv e (Avion).
Si un constructeur de la classe d riv e appelle explicitement un constructeur de la classe de base, cet appel doit tre obligatoirement la premi re instruction de constructeur. Il doit utiliser pour cela, le mot cl super.
<!-- Slide number: 16 -->
Exemple:
class A
{ int i;
public A(int x)
{ i = x; // Constructeur de la classe A
}
}
class B extends A // H ritage
{ double z;
public B (int f, double w) // Constructeur de la classe B
{ super(f); // Appel explicite du constructeur de A, en 1 re ligne.
z = w;
}
}
<!-- Slide number: 17 -->
Exercice1:
Cr ez une classe Person
Cr ez une classe Student et une autre classe Teacher , les deux h ritent de la classe Person .
La classe Student aura une m thode publique GoToClasses , qui affichera l cran Im going to class. .
La classe Teacher aura une m thode publique Explain , qui affichera l cran Explanation begins . En plus, il aura un attribut priv subject de type string.
La classe Person doit avoir une m thode SetAge(int n) qui indiquera la valeur de leur ge (par exemple, 15 years old).
La classe Student aura une m thode publique DisplayAge qui crira sur l cran My age is: XX years old .
4. cr ez une autre classe de test appel e Test qui contiendra Main et:
Cr ez un objet Person et faites-lui dire Hello
Cr er un objet Student, d finir son ge 15 ans, faites-lui dire Hello , Im going to class. et afficher son ge
Cr ez un objet Teacher, 40 ans, demandez-lui de dire Hello puis commence lexplication.
<!-- Slide number: 18 -->
Exercice2:
Cr ez une classe House , avec un attribut surface , un constructeur qui d finit sa valeur et une m thode Display pour afficher Je suis une maison, ma surface est de XXX m2 (XXX: la valeur de surface). Incluez aussi des getters et des setters pour la surface.
La classe House contiendra une porte (Door). Chaque porte aura un attribut color (de type String), et une m thode Display qui affichera Je suis une porte, ma couleur est bleu (ou quelle que soit la couleur). Inclure un getter et un setter. Cr ez galement la m thode GetDoor dans la classe House .
La classe Apartment est une sous-classe de la classe House , avec une surface pr d finie de 50m2.
Cr ez galement une classe Person, avec un nom (de type String). Chaque personne aura une maison. La m thode Display pour une personne affichera son nom, les donn es de sa maison et les donn es de la porte de cette maison.
crivez un Main pour cr er un Apartment, une personne pour y vivre et pour afficher les donn es de la personne.
<!-- Slide number: 19 -->
Netographie
https://waytolearnx.com/2020/04/exercices-corriges-java-les-classes-et-lheritage-partie-2.html
https://www.cours-gratuit.com/cours-java/cours-complet-de-java-en-pdf
https://miashs-www.u-ga.fr/prevert/Prog/Java/CoursJava/classes2.html