[Java] Constructeurs de super classe / sous-classe

table des matières

--Introduction

introduction

Je suis un ingénieur débutant. J'ai dû écrire la suite du code écrit par une personne lorsque je codais dans l'entreprise l'autre jour. À ce moment-là, je suis resté coincé dans l'héritage de classe , constructeur </ b> et j'ai passé un temps considérable ... Quand j'ai appris à nouveau depuis le début, j'ai trouvé quelque chose que je ne comprenais pas et c'était gênant, alors j'ai décidé de le résumer à nouveau.

De plus, cet article ・ "Personnes qui touchent actuellement Java" ・ "Personnes qui souhaitent revoir le contenu" C'est pour. Veuillez lire chaque nom de classe / nom de variable comme il convient.

Connaissances préalables

À propos des classes héritées

--Inherited class = Lors de la création d'une nouvelle classe, une classe qui hérite des mêmes parties que la fonction précédemment créée

  • La classe héritée est appelée "classe parent" et la classe héritée est appelée "classe enfant". ――Similairement appelé «super classe» ou «sous-classe»
  • Dans cet article, il est exprimé en super / sous.
  • Vous pouvez accéder aux méthodes / champs de la classe héritée en créant une instance de la classe héritée.
  • ↓↓↓↓ Comment écrire est ↓↓↓↓

Super.java


class Super {
  public void exampleSuper(){
    //Certains traitements
  }
}

Sub.java


class Sub extends Super(){ //Le nom de classe étend Inherit avec le nom de classe source d'héritage.
  public void exampleSub(){
    //Certains traitements
  }
}

constructeur

--Constructor = Une méthode qui est toujours appelée automatiquement lorsqu'une instance d'une classe est créée.

  • Une méthode avec le même nom que le nom de la classe
  • Habituellement, les noms de constructeur commencent par des lettres majuscules pour les raisons ci-dessus
  • Puisque la valeur de retour n'est pas attendue à l'origine, n'écrivez pas void (→ erreur de compilation)
  • Principalement utilisé pour initialiser les champs (variables membres) de cette classe. «Plutôt, comme d'habitude / implicitement, il vaut mieux ne rien faire d'autre.
    → Améliore la lisibilité / maintenabilité dans le développement à grande échelle
  • ↓↓↓↓ Comment écrire est ↓↓↓↓

Smple.java


class Sample{
  public Sample(){
    //Voici le constructeur
  }
  public void exampleMethod(){
    //Ceci est juste une méthode de classe
  }
}

Cette fois

Exécution implicite du constructeur

--Lors de l'instanciation d'une classe, elle est instanciée dans l'ordre du haut de la hiérarchie d'héritage vers le bas.

  • Le constructeur de sous-classe appelle d'abord le constructeur de superclasse
  • Si vous n'appelez pas explicitement le constructeur de superclasse, le constructeur sans argument est automatiquement appelé.
  • La méthode super () </ b> est implicitement (automatiquement) exécutée lorsque le constructeur est appelé.

●super();

Une méthode qui appelle le constructeur d'une superclasse. Les constructeurs de sous-classes exécutent implicitement (automatiquement) les constructeurs de superclasses "en tant qu'implémentation du langage", donc Il n'est pas toujours nécessaire de décrire

  • ↓↓↓↓ Exemple spécifique ↓↓↓↓

Super.java


class Super {
	Super() {
		System.out.println("Super classe!");
	}
}

Sub.java


class Sub extends Super {
	Sub() {
		//Exécute implicitement le constructeur de superclasse
		System.out.println("C'est une sous-classe!");
	}
}

Main.java


class Main {
	public static void main(String[] args) {
		Sub obj = new Sub();
}

//Résultat d'exécution
C'est une super classe!
C'est une sous-classe!

"Le super constructeur implicite n'est pas défini"

  • Si le constructeur de la super classe est défini uniquement avec des arguments, la méthode implicitement exécutée "super ();" provoquera une erreur de compilation.

▽ Solution ① Créez un constructeur qui n'a pas d'arguments dans la super classe

Super.java


class Super {
    public name;
    public Super(){
        //Surcharger le constructeur
    }
    public Super(String name){
        this.name = name;
    }
}

(2) Dans le constructeur de sous-classe, appelez explicitement le constructeur de superclasse avec la méthode super (); qui correspond à l'argument du constructeur de superclasse.

Super.java


class Sub {
    public name;
    public Super(String name){
        //Principale->sous->Définissez la valeur de la variable de nom passée dans l'ordre de super dans le champ
        this.name = name;
    }
}

Sub.java


class Sub extends Super {
    Sub(String name) {
    //Correspond au nom de la variable de type Strin de la classe principale->Passé au constructeur de super classe
    super(name);
    }
}

Main.java


class Main {
	public static void main(String[] args) {
		Sub obj = new Sub(String name);
	}
}

À la fin

Cela fait encore longtemps, mais merci d'avoir lu. La prochaine fois, je pense que je devrais traiter de la gestion des exceptions avec try-catch. Puis.

Recommended Posts