Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharge d'un constructeur

Sujet résolu
    18 janvier 2019 à 18:36:19

    Bonjour,

    Je cherche à créer un constructeur avec des paramètres par défaut (comme en C++), sauf que je sais que ceux-ci n'existent pas en Java.

    J'ai donc essayé de créer deux constructeurs, celui sans paramètre appelant celui avec paramètres et en lui donnant des valeurs par défaut. Voici un exemple très simplifié de ce que j'ai essayé de faire :

    public class A 
    {
    	private int a;
    	
    	public A(int b)
    	{
    		a = b;
    	}
    	
    	public A()
    	{
    		A((int)0); // j'ai également essayé en créant une variable int puis la donner en paramètre
    	}
    } 
    public class Main 
    { 
        public static void main (String[] args)
        {
            A b = new A(0); // marche
            A a = new A(); // ne marche pas
        }   
    }


    Ce code ne marche pas, j'obtiens l'erreur :

    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    	The method A(int) is undefined for the type A


    Quelqu'un saurait comment palier à ce problème (si c'est possible de faire cela) ?

    EDIT :

    J'ai trouvé une solution, je sais pas si c'est une solution qu'il est recommandé d'utiliser, mais ça marche (je veux bien que quelqu'un me dise si c'est une bonne idée de faire ça d'ailleurs)

    public class A 
    {
    	private int a;
    	
    	public A(int b)
    	{
    		maFonction(b);
    	}
    	
    	public A()
    	{
    		maFonction((int)0);
    	}
    	
    	private void maFonction (int b)
    	{
    		a = b;
    	}
    }


    En gros, je crée une fonction privée qui sera appelée par les constructeurs. Je sais pas si c'est possible de faire ça tout le temps : quelqu'un pourrait me dire si c'est une bonne pratique de faire ça ?

    -
    Edité par Besti 18 janvier 2019 à 18:56:05

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2019 à 18:55:32

      Salut !

      Contrairement au C++ où tu peux appeler un autre constructeur simplement par son nom, en Java il faut utiliser soit this (pour un autre constructeur de ta classe), soit super (pour appeler explicitement un constructeur de la classe mère).

      public A() {
        this(0);
      }



      • Partager sur Facebook
      • Partager sur Twitter
        18 janvier 2019 à 18:59:53

        Salut,

        Effectivement, je n'ai pas du tout pensé au this. Je savais que le super permettait d'appeler le constructeur de la classe mère, mais j'ignorais qu'il fallait préciser this pour le constructeur (même si c'est logique après coup). J'imagine que je me suis laissé corrompre par le C++ !

        Cette solution est du coup bien meilleure solution que la mienne.

        Merci bien !

        -
        Edité par Besti 18 janvier 2019 à 19:11:43

        • Partager sur Facebook
        • Partager sur Twitter

        Surcharge d'un constructeur

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown