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.
Langue: Java11, JDK13.0.2 Environnement d'exploitation: Windows 10
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,
Le fait qu'une méthode de sous-classe agisse au nom d'un membre d'une superclasse est appelé ** overriding **.
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.
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) `.
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.
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