Maison > Java > javaDidacticiel > Héritage Java, si la sous-classe hérite du constructeur de la classe parent

Héritage Java, si la sous-classe hérite du constructeur de la classe parent

PHP中文网
Libérer: 2017-06-22 10:27:45
original
1762 Les gens l'ont consulté

En héritage en java, si la sous-classe hérite du constructeur de la classe parent

En héritage en java, la sous-classe n'héritera pas du constructeur de la classe parent, mais elle doit appeler (implicite ou explicite)

Regardons l'exemple :

public class TestExtends {
    public static void main(String[] args) {
        SonClass s = new SonClass(66);
    }
}

class FooClass{
    public FooClass() {
        System.out.println(100);
    }
    public FooClass(int count) {
        System.out.println(count);
    }
}

class SonClass extends FooClass{
    public SonClass() {
    }
    public SonClass(int c) {
        System.out.println(1234);
    }

}
Copier après la connexion

Résultat d'exécution :

100
1234

Ensuite, analysez pourquoi un tel résultat est produit :
Lorsque le programme exécute la ligne SonClass s = new SonClass(66);, il appelle

public SonClass(int c) {
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}
Copier après la connexion

Par conséquent, lorsque la sous-classe s'exécute. la méthode constructeur ci-dessus, cela équivaut à exécuter le code suivant :

public SonClass(int c) {
    super(); // 必须在第一行调用,否则不能编译
    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();
}
Copier après la connexion

Le résultat est donc :
100 1234

Ensuite, un autre cas (appel explicite) est introduit . Si la sous-classe Le constructeur s'écrit comme ceci :

public SonClass(int c) {
    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了
    System.out.println(1234);
}
Copier après la connexion

La structure d'exécution est :
2 1234

Résumé :

  • Les constructeurs ne peuvent pas être hérités et ne sont utilisés que pour être appelés dans les sous-classes (si la classe parent n'a pas de constructeur sans paramètre, lors de la création d'une sous-classe, elle doit être explicitement appelée dans la première ligne de le corps du code du constructeur de sous-classe) La classe parent a un constructeur paramétré, sinon elle ne peut pas être compilée

  • Si la classe parent n'a pas de constructeur paramétré, alors vous n'avez pas besoin de le faire) ; appelle explicitement le constructeur de la classe parent lors de la création d'une sous-classe. Le système appellera par défaut le constructeur sans paramètre de la classe parent super();

  • Si la classe parent n'a pas de constructeur sans paramètre, le le système ne peut pas appeler le constructeur sans paramètre par défaut, donc si l'appel à la compilation n'est pas affiché, il ne passera pas ;

Explication supplémentaire :

  1. En Java, après avoir créé un constructeur paramétré, le système n'aura plus de constructeur sans paramètre par défaut

  2. S'il n'y a pas de constructeur dans la classe parent, le système aura un constructeur sans paramètre par défaut

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal