Java à partir du débutant, remplacer

introduction

Cet article est un mémorandum. Bien qu'il s'agisse d'un contenu de niveau de référence, le code à publier dans cet article est ~~ ** L'erreur ** est le centre. Ceci est dans le but de poster la partie erronée pendant le codage réel et de l'afficher pour une auto-réflexion ~~. De plus, je n'aborderai pas la partie profonde ici, car je la passerai en revue plus tard tout en étudiant les questions d'examen Java Silver.

environnement

Langue: Java11, JDK13.0.2 Environnement d'exploitation: Windows 10

passer outre

La dernière fois, j'ai traité de la relation entre les superclasses et les sous-classes.

La sous-classe hérite des méthodes de la superclasse, mais vous souhaitez parfois définir un autre processus en utilisant le même nom de méthode. Par exemple, lors de la préparation d'une méthode de vérification des membres avec show 〇〇 (). Même si vous cochez la même chose, vous pourrez utiliser watch 〇 〇 (), voir 〇 〇 (), vérifier 〇 〇 () correctement. Cependant, des arguments et des types différents le rendent très difficile à mémoriser et à utiliser, et le code inutilement long réduit la lisibilité. Dans la sous-classe, vous pouvez définir une nouvelle méthode qui est exactement la même que celle implémentée dans la superclasse **, et lors d'un appel depuis un objet, la sous-classe a la priorité. ** **

Comme condition,

  1. Même signature (nom de méthode, type de liste d'arguments, nombre, ordre)
  2. Modificateurs d'accès identiques ou plus lâches
  3. Le type de retour est fondamentalement le même (à l'exclusion des valeurs de retour covariantes)

Le fait qu'une méthode de sous-classe agisse au nom d'un membre d'une superclasse est appelé ** overriding **.

Manipulez tous ensemble en super classe

Comme j'écris plusieurs fois, les sous-classes héritent des membres de la superclasse. Et en surchargeant, vous pouvez écrire un processus dédié à la sous-classe et le faire fonctionner préférentiellement. Par conséquent, lors de l'utilisation d'une sous-classe qui est un enfant de la même superclasse, le traitement peut être décrit collectivement par la méthode de la superclasse.

arrayCatsShow.java


class WildCat
{
  protected int number;
  protected double weight;

  public WildCat()
  {
    number = 1;
    weight = 1.0;
  }
  public void getCat(int n,double w)
  {
    number = n;
    weight = w;
    System.out.println(number +"Le poids du deuxième chat" + weight + "C'est kg.");
  }

  public void show()
  {
    System.out.println("Ce chat" + number + "Ceci est le deuxième chat.");
    System.out.println("Le poids de ce chat" + weight + "C'est kg.");
  }
}

Sur la base de cette classe WildCat, préparez les classes HouseCat et MyCat.

arrayCatsShow.java


class HouseCat extends WildCat
{

  public void show()
  {
    System.out.println("Ce chat domestique" + number + "C'est la seconde." );
  } 
}

class MyCat extends WildCat
{
  public void show()
  {
    System.out.println("De ces chats" + number + "Le poids actuel est" + weight + "était." );
  }
}

Ensuite, préparez un chat individuel.

arrayCatsShow.java


class arrayCatsShow
{
  public static void main(String[] args)
  {
    WildCat[] cats = new WildCat[4];
 
    cats[0] = new WildCat();
    cats[0].getCat(1, 5.2);

    cats[1] = new HouseCat();
    cats[1].getCat(2, 4.2);

    cats[2] = new MyCat();
    cats[2].getCat(3, 5.6);

    cats[3] = new MyCat();
    cats[3].getCat(4, 8.4);

    for(int i=0; i< cats.length; i++){
      cats[i].show();
    }
  }
}

Puisque nous avons préparé un tableau de superclasses, puis «new» individuellement, des phrases basées sur chaque définition de «show ()» apparaissent.

Quand tu veux juste ajouter

Lorsque vous souhaitez traiter super classe + sous-classe.

HouseCatShow.java


class HouseCat extends WildCat
{
  public void show()
  {
    super.show();
    System.out.println("Ce chat domestique" + number + "C'est la seconde." );
  }
}

Vous n'avez pas à tout réécrire car vous pouvez apporter le traitement de la super classe tel quel avec super. Method name. Ceci est également vrai pour les champs, vous pouvez donc également introduire des valeurs de superclasse avec super.field.

Au fait, si vous ne voulez pas remplacer la méthode de la superclasse, vous pouvez ajouter ** final like public final void show () et vous ne pouvez pas le remplacer . Cela peut également être fait avec le nom et le champ de la classe, donc s'il s'agit d'une classe finale, elle sera ** non extensible ** de la sous-classe, et s'il s'agit d'un champ final, la valeur du champ ** ne sera pas modifiée sauf pour l'initialisation au moment de la déclaration. constante) `.

en conclusion

J'ai trouvé le mot ** valeur de retour covariante ** dans la collection de problèmes Silver, mais je vais bientôt examiner la bibliothèque de classes, donc j'aimerais clarifier la relation entre les classes avant de traiter.

référence

J'écris et compile autant que possible des variables et des expressions moi-même, donc si je veux les citer complètement, je vais les décrire.

Easy Java 7ème édition Java SE11 Silver Problem Collection (communément appelé Kuromoto)

Recommended Posts

Java à partir du débutant, remplacer
Java, instance à partir du débutant
Java à partir de débutant, héritage
Java, constructeur de surcharge à partir du débutant
Java pour les débutants, les variables et les types
Java à partir du débutant, imbriqué / break / continue
Java, instruction if / instruction switch à partir du débutant
Java, pour instruction / while à partir du débutant
Java à partir du débutant, déclaration de classe / génération d'objet
La vie Java à partir de zéro
java (remplacement)
java débutant 4
java débutant 3
java débutant
Java, classe abstraite pour commencer par débutant
Java, interface pour partir du débutant
IntelliJ à partir de 1
Java à partir du débutant, opérateur logique / opérateur conditionnel
Introduction à Java à partir de 0 Partie 1
Exercices pour les débutants Java
Exercice Java "Débutant"
Pour les ingénieurs Java qui démarrent Kotlin à partir de maintenant
[Java] Surcharge / Remplacer / Héritage
Appeler Java depuis JRuby
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Évaluer la source Java à partir de Java
Picture-in-picture à partir d'iOS14
Accédez à API.AI depuis Java
De Java à Ruby !!
[Java] Surcharge et remplacement
[Java] Plates-formes parmi lesquelles choisir pour le développement Java à partir de maintenant (2020)
Migration de Cobol vers JAVA
Révision et résumé de Progate Java (débutant)
Création d'index Elastic Search à partir de Java
Nouvelles fonctionnalités de Java7 à Java8
Connectez-vous de Java à PostgreSQL
Utilisation de Docker depuis Java Gradle
De Java inefficace à Java efficace
JavaScript vu de Java
[Débutant] Description du "tableau" de base Java
Exécuter des instructions non-Java à partir de Java
Résolvez AtCoder Beginner Contest 151 avec Java
Appeler la classe scellée de Kotlin depuis Java
Différences entre Java "débutant" et Kotlin
Résolvez AtCoder Beginner Contest 150 avec Java
Coder Java depuis Emacs avec Eclim
Deep Learning Java from scratch 6.4 Régularisation
Résolvez AtCoder Beginner Contest 153 avec Java
[Java débutant] À propos de l'abstraction et de l'interface
Obtenir le pays à partir de l'adresse IP (Java)
Exécutez node.js depuis Android Java (traitement)
Exécuter le fichier de commandes à partir de Java
[Java] Supprimer les espaces dans les chaînes de caractères
Procédure de préparation pratique d'Akka à partir de Java
[Java débutant] == opérateur et méthode equals
Accéder à Teradata depuis une application Java
Résolvez AtCoder Beginner Contest 175 avec Java
Utiliser Chrome Headless de Selenium / Java
Java sera impliqué dès aujourd'hui
De Java à VB.NET - Écriture de notes de contraste