[JAVA] [Head panic] Priorité lorsque des variables / méthodes portant le même nom sont utilisées dans des classes héritées

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

[Head panic] Priorité lorsque des variables / méthodes portant le même nom sont utilisées dans des classes héritées
Java learning_Behavior lorsqu'il y a un champ avec le même nom et une méthode avec le même nom dans deux classes dans une relation d'héritage
[Head panic] Priorité lorsque des variables / méthodes portant le même nom sont utilisées dans des classes héritées
Rails Les méthodes privées font mal si vous ressentez la même chose que Java!
Si vous rencontrez des problèmes avec le problème de code de caractère du Myanmar (birman)
Si vous rencontrez des problèmes avec JPA ou Hibernate, ne cherchez pas sur Google et regardez d'abord ici
Que faire si vous ne pouvez pas exécuter avec la commande "nom du package Java / nom de la classe"
Ruby / rexml: tournez chacun avec un élément du même nom
N'y a-t-il pas un conflit de nom lorsque enum a le même nom dans l'instruction switch?
Quand tu te perds dans le nom de la classe