POO-S2-TD4.pdf

Exercice 1

  1. Soit la déclaration de la méthode suivante :

    public void test(int a) {}
    

    Quelles sont les surcharges admises entre ces différentes possibilités ?

    ✔️public void test() {} ✔️public void test(double a) {} ✔️public void test(int a, int b) {}public int test(int a) {}

    <aside> 💡 Java doit être capable de savoir quel méthode est appelé. Comme il n’est pas possible de spécifier le type de retour à l’appel d’une méthode il est impossible de différencier laquelle des deux est appelé. De plus, la signature étant la même au sein de la même classe, le compilateur refusera de compiler le programme.

    </aside>

  2. Le fichier Java, A.java, suivant ne compilera pas. Expliquez pourquoi.

    public class A {
    	
    	void A(int i) {
    		System.out.println("Hello");
    	}
    	
    	public static void main(String[] args) {
    		A unA = new A(5);
    	}
    
    }
    

    La façon d’écrire void A(int i){...} la définit comme une méthode puisqu’elle a un type de retour. Cette méthode est ensuite appelée comme si elle était un constructeur.

  3. Le code suivant est-il correct ? sinon identifier les erreurs puis corriger les.

    //classe Test
    class Test {
    	public int a;
    	public int c;
    
    	public Test (int b) {
    		this.a = b;
    	}
    
    	public static int donneC() {
    		return this.c;
    	}
    
    }
    
    //classe PrincipalTest
    public class PrincipalTest {
    	public static void main(String[] args) {
    	Test unTest = new Test();
    	}
    }
    

    Le code n’est pas valide car il n’y a pas de constructeur par défaut capable de répondre à l’appel fait dans la méthode main. Il faudrait soit en implémenter un, soit ajouter un paramètre à l’appel au constructeur dans la méthode main.

    Autre problème, on ne peut pas accéder à une variable d’instance depuis une méthode static

    <aside> ♻️ Une variable sans static est une variable d’instance. Si une variable est déclaré en static elle n’est pas une propriété de l’iinstance mais une variable globale partagée par toutes les méthodes de la classe.

    DONC :

    Voir cours 3

    </aside>

    Exercice 2