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