Héritage des classes de base du langage Java

Héritage des classes de base du langage Java

L'une des trois principales caractéristiques du langage Java


Caractéristiques héritées

Grâce à l'héritage, nous pouvons étendre ou transformer sur la base de types existants pour obtenir de nouveaux types de données.

  • Les types de données existants sont appelés superclasses ou superclasses.
  • Les nouveaux types de données obtenus sont appelés sous-classes ou classes dérivées.
  • L'héritage de classe améliore la réutilisabilité et l' évolutivité du code du programme , et raccourcit le cycle de développement logiciel.

Classification héritée

  • Héritage unique --- les sous-classes ne peuvent avoir qu'une seule classe parent directe
  • Héritage multiple ----- les sous-classes peuvent avoir plusieurs classes parentales directes

Java ne prend pas en charge l'héritage multiple

Héritage

Format:

父类{
	父类的内容
}
子类 extends 父类{
	子类的内容
}

Exemple:

package NewBolg;

class inherit {
    private String blogger = "董小宇";
    public String getBlogger() {
        return blogger;
    }
    public void setBlogger(String blogger) {
        this.blogger = blogger;
    }
    public static void main(String[] agrs){
        Subclass subclass = new Subclass();
        System.out.println("平台:" + subclass.getBlog() + ",博主是:" + subclass.getBlogger());
    }
}
class Subclass extends inherit{
    private String Blog = "CSDN";
    public String getBlog() {
        return Blog;
    }
    public void setBlog(String blog) {
        Blog = blog;
    }
}

Le résultat courant est:

平台:CSDN,博主是:董小宇

Remarque:

  1. Les variables membres définies dans la classe parent sont héritées par la sous-classe, mais les privateautorisations ne sont pas accessibles directement, et d'autres sont directement accessibles. Les méthodes membres définies dans la classe parent sont également héritées par la sous-classe.
  2. Les méthodes de redéfinition (redéfinition) de la sous-classe sont exactement les mêmes que celles héritées de la classe parente (même nom de méthode, même paramètre, même type de retour).
  3. L'autorisation de contrôle d'accès est supérieure à l'autorisation de contrôle d'accès de la méthode de la classe parente et le type d'exception levé par la méthode de la sous-classe est inférieur à celui de la classe parente.

Réécrire les règles: règle "Trois identiques, un petit, un grand"

  • "Trois mêmes": le même nom de méthode, la même liste de paramètres formels et le même type de retour;
  • "Un petit" signifie que la classe d'exception levée par la déclaration de méthode de sous-classe doit être plus petite ou égale à la classe d'exception levée par la déclaration de méthode de classe parent;
  • "One big" fait référence aux droits d'accès des méthodes de la sous-classe qui doivent être supérieurs ou égaux aux méthodes de la classe parent;
  • La méthode prioritaire et la méthode substituée sont des méthodes de classe ou des méthodes d'instance, et aucune ne peut être une méthode de classe ou une méthode d'instance.

La différence entre la réécriture de méthodes et la surcharge de méthodes

  • La couverture est la relation directe entre la sous-classe et la classe parente; la surcharge est la relation entre plusieurs méthodes au sein de la même classe.
  • L'écrasement se fait généralement entre deux méthodes, et la surcharge dépend de plusieurs méthodes surchargées.
  • Les méthodes remplacées ont le même nom de méthode et la même liste de paramètres formels, tandis que les méthodes surchargées ne peuvent avoir que le même nom de méthode, pas la même table de paramètres formels.
  • Lors de l'écrasement, la méthode est distinguée en fonction de l'objet qui l'appelle; et la surcharge consiste à déterminer quelle méthode est appelée en fonction des paramètres formels.

Remarque:

  • superEst un mot-clé fourni par Java, c'est la référence par défaut de l'objet parent direct.
  • Tout comme il thisne peut pas apparaître dans une staticméthode modifiée, superil ne peut pas apparaître dans staticune méthode.
  • Si la sous-classe définit des mathématiques avec le même nom que la classe parent, il se produira également que les attributs de la sous-classe remplacent les attributs de la classe parent. Lorsque les méthodes de la sous-classe accèdent directement à cette propriété, elles accèdent à la propriété prioritaire et ne peuvent pas accéder à la propriété substituée en superaccédant à la propriété substituée de la classe parente.

Exemple:
si nous accédons à un attribut nommé a dans une méthode, mais que l'appelant spécifié n'est pas affiché, le système recherche un dans l'ordre:

  1. Recherchez s'il existe une variable locale nommée a dans cette méthode.
  2. Recherchez si la classe actuelle contient un attribut nommé a.
  3. Recherchez si l'attribut de a est inclus dans la classe parent directe de a, puis tracez la classe parent de a à son tour, en connaissant la java.lang.Objectclasse. Si l'attribut nommé a est introuvable à la fin, le système générera une erreur de compilation.

Appelez le constructeur de la classe parente

La sous-classe n'hérite pas du constructeur de la superclasse, mais parfois le constructeur de la sous-classe doit appeler le code d'initialisation du constructeur de la superclasse.


Le constructeur de la sous-classe appelle le constructeur de la classe parent comme suit:

  1. La première ligne de code dans le corps d'exécution de la méthode de construction de la sous-classe utilise l' superappel explicite à la méthode de construction de la classe parent. Le système superappellera la méthode de construction correspondante de la classe parent en fonction de la liste d'arguments transmise lors de l'appel.
  2. La première ligne de code de la méthode d'exécution de la méthode de construction de la sous-classe utilise l' thisappel explicite à la méthode de construction de cette classe. Le système thisappellera une autre méthode de construction de cette classe en fonction de la liste des arguments passés lors de l'appel. Lorsqu'un autre constructeur de cette classe est exécuté, le constructeur de la classe parente est appelé.
  3. Il n'y a ni superappel ni thisappel dans le corps d'exécution du constructeur de la sous - classe. Avant l' exécution du constructeur de la sous-classe, le système appelle implicitement le constructeur du parent sans paramètres.

Remarque: L'
super appel est thistrès similaire à l' superappel , la différence est que le constructeur de sa classe parent est appelé, et cela appelle le constructeur porté dans la même classe. Par conséquent, l'utilisation de super pour appeler la structure de classe parent doit également apparaître dans la première ligne de l'exécution de la construction de la sous-classe, afin que l' thisappel et l' superappel n'apparaissent pas en même temps.

Exemple:

public class AA {
    public static void main(String[] args){
        //输出A
        //分析:AA为父类,则无影响
        AA aa = new AA();
        //输出A,B
        //分析:BB为子类,调用无参BB,super无参父类,输出A,然后输出无参BB输出语句
        BB bb = new BB();
        //输出A,AA,BB
        //分析:BB为子类,调用含参BB,super带参父类,带参父类中含有this(),先执行不带参父类,然后执行带参父类的输出语句,最后执行带参子类的输出语句
        BB bb = new BB(1);
    }
    AA(){
        System.out.println("A");
    }
    AA(int i){
        this();
        System.out.println("AA");
    }
}
class BB extends AA{
    BB(){
        super();
        System.out.println("B");
    }
    BB(int i){
        super(i);
        System.out.println("BB");
    }
}

Je suis aussi un débutant en programmation, et il est inévitable qu'il y ait une erreur de compréhension. J'espère qu'après lecture, vous pourrez commenter les erreurs, merci

Publié 23 articles originaux · loué 276 · 20 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/lolly1023/article/details/105539770
conseillé
Classement