A.java
public class A {
String val = "A";
void print() {
System.out.println(val);
}
}
B.java
public class B extends A {
String val = "B";
@Override
void print() {
System.out.println(val);
}
}
Implémentez et exécutez ce qui suit en utilisant ces classes
Main.java
public class Main {
public static void main(String[] args) {
A a = new A();
//Puisque la classe B hérite de la classe A, A peut être utilisé comme type de variable.
A b = new B();
//Puisque le type de b est A, val utilise la valeur du champ défini dans le type A
System.out.println("Afficher un val: " + a.val); // A
System.out.println("Afficher la valeur de b: " + b.val); // A
System.out.print("impression d'un()Exécuter la méthode: ");
a.print(); // A
System.out.print("b imprimer()Exécuter la méthode: ");
b.print();// B
}
}
Lorsque b.val est affiché, "A" est affiché Parce que A est utilisé comme type de variable b et le champ de A est utilisé.
Par contre, "B" est affiché dans b.print () Cela est dû au fait que la méthode print () est remplacée dans la classe B et que la méthode de la classe B est prioritaire lorsque new B () est exécuté.
Notez que la méthode est remplacée, mais le comportement change car les variables sont liées au champ.
Recommended Posts