Maison > Java > javaDidacticiel > Pourquoi une sous-classe Java obtient-elle une erreur « Le super constructeur implicite n'est pas défini » et comment peut-elle être corrigée ?

Pourquoi une sous-classe Java obtient-elle une erreur « Le super constructeur implicite n'est pas défini » et comment peut-elle être corrigée ?

DDD
Libérer: 2024-11-29 14:34:11
original
880 Les gens l'ont consulté

Why Does a Java Subclass Get an

Erreur implicite du super constructeur dans le constructeur Java par défaut

En Java, les constructeurs par défaut sont automatiquement fournis par le compilateur pour les classes qui ne définissent pas explicitement tous les constructeurs. Cependant, lorsqu'une classe de base définit un constructeur, le compilateur ne générera plus implicitement un constructeur par défaut pour ses sous-classes. Cela peut entraîner une erreur « Le super constructeur implicite n'est pas défini pour le constructeur par défaut ».

Exemple :

Considérez ce code :

abstract public class BaseClass {
    String someString;
    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}

public class ACSubClass extends BaseClass {
    public ASubClass() { // default constructor
        // super(someString);  // error: super() must be invoked in subclasses
    }
    public String getName() {
        return "name value for ASubClass";
    }
}
Copier après la connexion

Ici, ACSubClass n'a pas de constructeur explicite. Au lieu de cela, il s'appuie sur le constructeur par défaut fourni par le compilateur. Cependant, puisque BaseClass définit un constructeur, aucun constructeur par défaut n'existe pour BaseClass. Cela conduit à l'erreur du compilateur, indiquant qu'un constructeur explicite doit être défini dans la sous-classe.

Solution :

Pour résoudre cette erreur, il faut fournir un constructeur explicite dans la sous-classe qui appelle le super constructeur en utilisant super(parameters). Alternativement, la classe de base peut être modifiée pour fournir un constructeur par défaut.

// Option 1: Provide an explicit constructor in the subclass
public class ACSubClass extends BaseClass {
    public ASubClass(String someString) {
        super(someString);
    }
    public String getName() {
        return "name value for ASubClass";
    }
}

// Option 2: Modify the base class to have a default constructor
abstract public class BaseClass {
    String someString;

    public BaseClass() {}  // added default constructor

    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}
Copier après la connexion

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!

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