La classe de base Personne( String

Transcription

La classe de base Personne( String
POO Feuille 5
Question 1 Définir une hiérarchie de classe pour des classes suivantes :
– La classe de base Personne( String nom, int age)
– La classe Scolaire hérite de la classe Personne. Elle contient des variables spécifiques (String
nom-etab, String niveau). Niveau={”Primaire”, ”Sécondaire”, ”Supérieur”}.
– La classe Etudiant est dérivée de la classe Scolaire. Elle est dotée de la variable formation
(par exemple ”L1info ”, ”L2math”, etc.)
– La classe Lyceen est dérivée de la classe Scolaire et elle a la variable seriebac qui peut
prendre des valeurs ”L”, ”S”, ”ES”.
Ecrire pour chaque classe un constructeur et une méthode affiche() pour afficher les variables
(attributs) de cette classe. Ecrire un programme d’utilisation.
Question 2
Définir une hiérarchie de classe pour des classes suivantes :
– La classe de base est la classe abstraite Compte (int numero, String nom-titulaire, double
solde). Elle permet d’effectuer les opérations classiques sur les comptes : déposer l’argent,
consulter l’état des comptes. La méthode retrait est une méthode abstraite et elle est
définie dans les classes dérivées.
– La classe CompteEpargne hérite de la classe Compte. Elle contient une variable taux
indiquant le taux d’intérêt de cette classe et une méthode spécifique qui calcule des intérêts
acquis et les ajoute au solde du compte. Dans cette classe, on peut retirer un montant m,
si m <= solde.
– La classe CompteCourant hérite de la classe Compte. Elle contient une variable decouvert
qui donne la valeur du découvert autorisé par la banque. Dans cette classe on peut retirer
un montant m, si solde + decouvert <= m.
Ecrire un programme d’utilisation.
Question 3 Donner les affichages du programme suivant.
class A{
private int x;
private static int y=2;
public A(){System.out.println("constructeur1 de A");}
public A(int a) {System.out.println("constructeur2 de A"); x=a;}
public int getx() {System.out.print("x par getx de A:");return x;}
public static int gety() {System.out.print("y par gety de A:");return y;}
}
class B extends A {
public B(){this(7);System.out.print("constructeur1 de B");}
public B(int a){super(a); System.out.print("constructeur2 de B");}
}
class C extends B{
private int x;
private static int y=5;
public C()
{super();System.out.println("constructeur de C");}
public int getx() {System.out.println("x par getx de C:");return x;}
public static int gety(){System.out.println("y par gety de C:");return y;}
}
1
public class Tstheritage1
{public static void main(String args[])
{ C c= new C();
System.out.println(c.getx());
System.out.println( C.gety());
B b=new B();
System.out.println(b.getx());
System.out.println( B.gety() );}
}
Est-il posible de changer le deuxième constructeur de B comme suivant :
public B(int a){x=a; System.out.println("constructeur2 de B");}
Question 4
class A {
public void f(){ System.out.println("f de
public void h(){ System.out.println("h de
public void m(A a){ System.out.println("m
}
class B extends A {
public void f(){ System.out.println("f de
public void g(){ System.out.println("g de
public void m(B b){ System.out.println("m
}
class C extends B {
public void g(){ System.out.println("g de
public void h(){ System.out.println("h de
}
A");}
A");}
de A"); a.f());}
B");}
B");}
de B"); b.f());}
C");}
C");}
Ce qui suit est-il correct ? Si oui donner les affichages
1- A a =new A() ; a.f() ; a.g() ; a.h() ;
2- A a =new B() ; a.f() ; a.g() ; a.h() ;
3- B b =new B() ; b.f() ; b.g() ; b.h() ;
4- B b =new A() ; b.f() ; b.g() ; b.h() ;
5- A a =new A() ; B b =new B() ; a.m(b) ;
6- A a =new A() ; B b =new B() ; b.m(a) ;
2