[JAVA] [Kopfpanik] Priorität, wenn Variablen / Methoden mit demselben Namen in geerbten Klassen verwendet werden

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);
	}
}

Implementieren und führen Sie Folgendes mit diesen Klassen aus

Main.java


public class Main {
	public static void main(String[] args) {
		A a = new A();
		 //Da die B-Klasse von der A-Klasse erbt, kann A als Variablentyp verwendet werden.
		A b = new B(); 
		
		//Da der Typ von b A ist, verwendet val den Wert des in Typ A definierten Feldes
		System.out.println("Zeige einen Wert: " + a.val); // A
		System.out.println("Wert von b anzeigen: " + b.val); // A
		
        System.out.print("Druck von a()Methode ausführen: "); 
		a.print(); // A
		System.out.print("b drucken()Methode ausführen: ");
		b.print();// B
     }
}

Wenn b.val angezeigt wird, wird "A" angezeigt Weil A als Typ der Variablen b verwendet wird und das Feld von A verwendet wird.

Andererseits wird "B" in b.print () angezeigt Dies liegt daran, dass die print () -Methode in der B-Klasse überschrieben wird und die B-Klassenmethode Vorrang hat, wenn neues B () ausgeführt wird.

Beachten Sie, dass die Methode überschrieben wird, sich das Verhalten jedoch ändert, da die Variablen an das Feld gebunden sind.

Recommended Posts

[Kopfpanik] Priorität, wenn Variablen / Methoden mit demselben Namen in geerbten Klassen verwendet werden
Java learning_Behavior, wenn ein Feld mit demselben Namen und eine Methode mit demselben Namen in zwei Klassen in einer Vererbungsbeziehung vorhanden sind
[Kopfpanik] Priorität, wenn Variablen / Methoden mit demselben Namen in geerbten Klassen verwendet werden
Rails Private Methoden tun weh, wenn Sie sich genauso fühlen wie Java!
Wenn Sie Probleme mit dem Zeichencode-Problem in Myanmar (Burmesisch) haben
Wenn Sie Probleme mit JPA oder Hibernate haben, googeln Sie nicht und schauen Sie zuerst hier
Was tun, wenn Sie den Befehl "Java-Paketname / Klassenname" nicht ausführen können?
Ruby / rexml: Drehen Sie jedes mit einem Element mit dem gleichen Namen
Gibt es keinen Namenskonflikt, wenn enum in der switch-Anweisung denselben Namen hat?
Wenn Sie sich im Klassennamen verlieren