Heritage
Heritage
Heritage
Professeur: M. Joundi
public class Personne { public String nom, prenom; public int anNaissance; public Personne() { nom=""; prenom=""; } public Personne(String nom, String prenom, int anNaissance) { this.nom=nom; this.prenom=prenom; this.anNaissance=anNaissance; } }
Appel par dfaut dans le constructeur de Personne au constructeur par dfaut de la superclasse de Personne, qui est Object
Exercice
Ecrire une classe Animal qui dispose dun attribut entier nbPattes . Cette classe dispose des mthodes suivantes :
le constructeur, qui prend en argument un entier (le nombre de pattes). String toString (), qui renvoie une chane de caractres contenant le nombre de pattes de lanimal. affiche() qui affiche le nombre de pattes de lanimal.
Ecrire une classe Autruche qui hrite de Animal Ecrire une classe Lapin qui hrite de Animal Ecrire une classe Main dans laquelle la mthode main() cre un lapin et une autruche
Dans la classe Animal la mthode toString () renvoi le message : Ceci et un animal de pattes . Dans la classe Autruche la mthode toString () renvoi le message : Ceci et une autruche de pattes . Dans la classe Lapin la mthode toString () renvoi le message : Ceci et un lapin de pattes . Remarque : les pointilles seront remplies par le nombre de pattes adquate
Corrig
La classe Animal :
class Animal { protected int nbPattes ; Animal( int nb){ //constructeur setNbPattes( nb); } // accesseur public int getNbPattes(){return nbPattes;} // modifieur public void setNbPattes( int nb){ nbPattes = nb;} public String toString() { return "Ceci est un animal dot de " + getNbPattes() + " pattes"; } public void affiche(){ System.out.println( toString()); } }
Corrig (2)
Les classes Autruche et Lapin :
class Autruche extends Animal { Autruche( int nb ){ //constructeur super( nb); } public String toString () { return "Ceci est une autruche dote de " + getNbPattes () + " pattes"; } } class Lapin extends Animal { Lapin( int nb ){ //constructeur super( nb); } public String toString () { return "Ceci est un lapin dot de " + getNbPattes () + " pattes"; } }
Corrig (3)
La classe Main :
class Main { public static void main(Stringargs[]) { Autruche kiki = new Autruche(2); Lapin bunny = new Lapin(4); kiki.affiche(); bunny .affiche(); } }
finale
Classe finale : classe qui ne peut pas tre super-classe d'une autre classe Syntaxe final class Z{ } Exemple:
final class A { } class B extends A{ }
finale
Mthode finale : Une sous classe ne pourra pas redfinir la mthode Syntaxe dans le corps d'une classe (disons A) final mthode() { }
Example: class A { final void m(){ System.out.println("final method"); } } class B extends A{ void m(){ // gnre une erreur la compilation System.out.println("never override a final method"); }
finale
Champ final : ni la classe, ni aucune sous classe ne peuvent changer la valeur initiale du champ Joue le rle d'une constante d'objet ou de classe Syntaxe final typeChamp nomChamp = valInitiale;
Redfinir une mthode (overriding) une classe fille peut redfinir une mthode ce qui signifie quelle peut rcrire une mthode en gardant exactement : La mme signature Le type de retour : peut tre le mme type ou du type dune classe fille lorsque lon redfinit une mthode cela signifie que lon modifie son implmentation
Redfinir une mthode (overriding) Une mthode redfinit ne peut pas avoir un accs plus restrictif . Pour appeler une mthode de la super-classe, on doit prcder le nom de la mthode par le mot cl super super.getNom()
une classe fille peut surcharger une mthode ce qui signifie quelle peut rcrire une mthode en gardant le mme nom mais pas la mme signature, cest- dire avec des paramtres dentre diffrents mais le paramtre de retour peut tre diffrent . lorsque lon surcharge une mthode, cela signifie que lon ajoute un comportement et que lon modifie son interface
OverLoad #Override
//Legal public class Foo{ void go() { } } public class Bar extends Foo { String go(int x) { return null; } }
//NOT LEGAL public class Foo{ void go() { } } public class Bar extends Foo { String go() { // Not legal! Can't change //only the return type return null; } }
Etant donn: class Clidders { public final void flipper() { System.out.println("Clidder"); } } public class Clidlets extends Clidders { public void flipper() { System.out.println("Flip a Clidlet"); super.flipper(); } public static void main(String [] args) { new Clidlets().flipper(); } } Quel est le rsultat : A Flip a Clidlet B Flip a Clidder C Flip a Clidder Flip a Clidlet D Flip a Clidlet Flip a Clidder E Compilation fails.
Etant donn: class Clidders { public final void flipper() { System.out.println("Clidder"); } } public class Clidlets extends Clidders { public void flipper() { System.out.println("Flip a Clidlet"); super.flipper(); } public static void main(String [] args) { new Clidlets().flipper(); } } Quel est le rsultat : A Flip a Clidlet B Flip a Clidder C Flip a Clidder Flip a Clidlet D Flip a Clidlet Flip a Clidder E Compilation fails.
class Top { public Top(String s) { System.out.print("B"); } } public class Bottom2 extends Top { public Bottom2(String s) { System.out.print("D"); } public static void main(String [] args) { new Bottom2("C"); System.out.println(" "); }} Quel est le rsultat? A BD B DB C BDC D DBC E Compilation fails.
class Top { public Top(String s) { System.out.print("B"); } } public class Bottom2 extends Top { public Bottom2(String s) { System.out.print("D"); } public static void main(String [] args) { new Bottom2("C"); System.out.println(" "); }} Quel est le rsultat? A BD B DB C BDC D DBC E Compilation fails. E is correct
class Clidder { private final void flipper() { System.out.println ("Clidder"); } } public class Clidlet extends Clidder { public final void flipper() { System.out.println("Clidlet"); } public static void main(String [] args) { new Clidlet().flipper(); } } Quel est le rsultat? A Clidlet B Clidder C Clidder Clidlet D Clidlet Clidder E Compilation fails.
class Clidder { private final void flipper() { System.out.println ("Clidder"); } } public class Clidlet extends Clidder { public final void flipper() { System.out.println("Clidlet"); } public static void main(String [] args) { new Clidlet().flipper(); } } Quel est le rsultat? A Clidlet B Clidder C Clidder Clidlet D Clidlet Clidder E Compilation fails. A is correct
Polymorphisme Question
Soit lexemple dune classe Etudiant qui hrite de la classe Personne. Soit une mthode getNom() de Personne qui est redfinie dans Etudiant quelle mthode getNom() sera excute dans le code suivant, celle de Personne ou celle de Etudiant? Personne a =new Etudiant(5); a.getNom();
la mthode appele ne dpend que du type rel (Etudiant) de lobjet a et pas du type dclar (ici Personne ) cest la mthode de la classe Etudiant qui sera excute
Polymorphisme
Polymorphisme Nom[] noms = new Nom[4]; noms[0] = new NomComplet("Cantonna", "Eric"); noms[1] = new Nom("Ronaldo"); noms[2] = new NomComplet("Overmars", "Marc"); ... for (int i = 0; i < 4; i++) { System.out.println(noms[i].getN om()); }
Polymorphisme
System.out.println(noms[i].getNom());
... Polymorph pm = new Polymorph(); pm.prnt(); pm = new MonomorphA(); pm.prnt(); pm = new MonomorphB(); pm.prnt();
Upcasting faire passer une classe drive pour sa super-classe sans risque toute mthode de la super-classe est aussi une mthode de la classe drive (par dfinition) Downcasting faire passer une super-classe pour une classe drive pas sans risque la classe drive tend la super-classe peut avoir des mthodes que la super-classe na pas
1. class Plant { 2. String getName() { return "plant"; } 3. Plant getType() { return this; } 4. } 5. class Flower extends Plant { 6. // insert code here 7. } 8. class Tulip extends Flower {} Quelle est la(les)ligne(s) de code insrer la ligne 6 est qui russira la compilation. A Flower getType() { return this; } B String getType() { return "this"; } C Plant getType() { return this; } D Tulip getType() { return new Tulip() ;}
1. class Plant { 2. String getName() { return "plant"; } 3. Plant getType() { return this; } 4. } 5. class Flower extends Plant { 6. // insert code here 7. } 8. class Tulip extends Flower {} Quelle est la(les)ligne(s) de code insrer la ligne 6 est qui russira la compilation. A Flower getType() { return this; } B String getType() { return "this"; } C Plant getType() { return this; } D Tulip getType() { return new Tulip() ;} A, C, and D
9 Given: 1. class Programmer { 2. Programmer debug() { return this; } 3. } 4. class SCJP extends Programmer { 5. // insert code here 6. } Quelle est la(les)ligne(s) de code insrer la ligne 5 est qui russira la compilation. A Programmer debug() { return this; } B SCJP debug() { return this; } C Object debug() { return this; } D int debug() { return 1; } E int debug(int x) { return 1; } F Object debug (int x) { return this; }
9 Given: 1. class Programmer { 2. Programmer debug() { return this; } 3. } 4. class SCJP extends Programmer { 5. // insert code here 6. } Quelle est la(les)ligne(s) de code insrer la ligne 5 est qui russira la compilation. A Programmer debug() { return this; } B SCJP debug() { return this; } C Object debug() { return this; } D int debug() { return 1; } E int debug(int x) { return 1; } F Object debug (int x) { return this; }
A, B, E, and F
10 Given: class Uber { static int y = 2; Uber(int x) { this(); y = y * 2; } Uber() { y++; } } class Minor extends Uber { Minor() { super(y); y = y + 3; } public static void main(String [] args) { new Minor(); System.out.println(y); }} Quel est le rsultat? A 6 B 7 C 8 D 9 E Compilation fails. F An exception is thrown.
10 Given: class Uber { static int y = 2; Uber(int x) { this(); y = y * 2; } Uber() { y++; } } class Minor extends Uber { Minor() { super(y); y = y + 3; } public static void main(String [] args) { new Minor(); System.out.println(y); }} Quel est le rsultat? A 6 B 7 C 8 D 9 E Compilation fails. F An exception is thrown. D is correct
1. class Dog { } 2. class Beagle extends Dog { } 3. 4. class Kennel { 5. public static void main(String [] arfs) { 6. Beagle bl = new Beagle(); 7. Dog dogl = new Dog(); 8. Dog dog2 = bl; 9. // insert code here 10. } } Quelle est la(les)ligne(s) de code insrer la ligne 9 est qui russira la compilation. A Beagle b2 = (Beagle) dog1; B Beagle b3 = (Beagle) dog2; D Beagle b4 = dog2; E None of the above statements will compile.
1. class Dog { } 2. class Beagle extends Dog { } 3. 4. class Kennel { 5. public static void main(String [] arfs) { 6. Beagle bl = new Beagle(); 7. Dog dogl = new Dog(); 8. Dog dog2 = bl; 9. // insert code here 10. } } Quelle est la(les)ligne(s) de code insrer la ligne 9 est qui russira la compilation. A Beagle b2 = (Beagle) dog1; B Beagle b3 = (Beagle) dog2; D Beagle b4 = dog2; E None of the above statements will compile. A and B are,correct
13 Given the following, 1. class X { void dol() { } } 2. class Y extends X { void do2() { } } 3. 4. class Chrome { 5. public static void main(String [] args) { 6. X x1 = new X(); 7. X x2 = new Y(); 8. Y y1 = new Y(); 9. // insert code here 10. } } Quelle est la(les)ligne(s) de code insrer la ligne 9 est qui russira la compilation. A x2.do2( ); B (Y) x2. do2( ); C ((Y)x2).do2(); D None of the above statements will compile.
13 Given the following, 1. class X { void dol() { } } 2. class Y extends X { void do2() { } } 3. 4. class Chrome { 5. public static void main(String [] args) { 6. X x1 = new X(); 7. X x2 = new Y(); 8. Y y1 = new Y(); 9. // insert code here 10. } } Quelle est la(les)ligne(s) de code insrer la ligne 9 est qui russira la compilation. A x2.do2( ); B (Y) x2. do2( ); C ((Y)x2).do2(); D None of the above statements will compile. C is correct
Le contrle d'accs
public
oui
oui
oui
oui
Chaque enseignant de luniversit effectue un certain nombre dheures denseignement dans une anne. Suivant le statut de lenseignant, un certain nombre de ces heures peut-tre considr comme complmentaire. Les heures complmentaires sont payes sparment lenseignant. Les volumes horaires sont exprims en heures entires et le prix dune heure complmentaire est de 35 Euros. Le nom et le nombre dheures total dun enseignant sont fixs sa cration, puis seul le nom peut tre librement consult (mthode nom()). Dautre part on veut pouvoir librement consulter un enseignant sur son volume dheures complmentaires (mthode hc()) et sur la rtribution correspondante (mthode retribution()). Il y a deux types denseignants : les intervenants extrieurs : toutes les heures effectues sont complmentaires, les enseignants de la fac : seules les heures assures au del dune charge statutaire de 192h sont complmentaires. A Modliser les enseignants . B Comment modifier le modle pour y introduire les tudiants de troisime cycle qui assurent des enseignements: toutes les heures effectues sont complmentaires mais dans la limite de 96 heures.