JAVA ------- Detaillierte Erklärung des Polymorphismus

Polymorphismus: Das gleiche Objekt zeigt zu verschiedenen Zeitpunkten unterschiedliche Formen

  • Beispiel: Katze können
    wir sagen, dass eine Katze eine Katze ist: Katze Katze = neue Katze ();
    wir können auch sagen, dass die Katze ein Tier ist: Tier Tier = neue Katze ();
    Hier zeigte Katze zu verschiedenen Zeiten einen anderen Zustand , das ist polymorph

  • Die Prämisse und Verwirklichung des Polymorphismus:
    1. Vererbung / Realisierung
    2. Es gibt Möglichkeiten zum Umschreiben
    3. Lassen Sie eine übergeordnete Klassenreferenz auf ein Unterklassenobjekt verweisen

  • Die Vorteile des Polymorphismus:

    • Verwenden Sie beim Definieren der Methode den übergeordneten Typ als Parameter und den spezifischen Subtyp, um an der Operation teilzunehmen, wenn diese in Zukunft verwendet wird
  • Nachteile des Polymorphismus:

    • Die eindeutigen Funktionen der Unterklasse können nicht verwendet werden

Schauen Sie sich den Code unten an

Tierklasse:

public class animal {
    
    
	
	public int age=40;
	
	public void eat() {
    
    
		System.out.println("动物吃东西");
	}
}

Katzenklasse: Tier umschreiben

public class cat extends animal {
    
    
	
	public int age=20;
	public int weight=10;
	
	@Override
	public void eat() {
    
    
		// TODO Auto-generated method stub
		System.out.println("猫吃鱼");
	}

	public void playgame() {
    
    
		System.out.println("猫捉迷藏");
	}
}

Hundeklasse: Tier umschreiben

public class dog extends animal {
    
    
	@Override
	public void eat() {
    
    
		System.out.println("狗吃骨头");
	}
}

Tierbetriebsklasse:

public class animalOperation {
    
    
	public void useAnimal(cat c) {
    
    
		c.eat();
	}
	
	public void useAnimal(dog d) {
    
    
		d.eat();
	}
	}
}

Haupthauptklasse:

public class animalDemo {
    
    
	public static void main(String[] args) {
    
    
		//有父类引用指向子类对象
		animal a=new cat();
		
		//多态访问成员变量编译和运行都要看animals有没有
		System.out.println(a.age);//输出40

		//多态访问成员方法编译看左边,运行看右边
		a.eat();
		
		//创建动物操作类对象,调用方法
		animalOperation ao=new animalOperation();
		cat c=new cat();
		ao.useAnimal(c);
		
		dog d=new dog();
		ao.useAnimal(d);
		
	}
}

Hier müssen wir darauf achten, wie der Polymorphismus auf Mitgliedsvariablen und Mitgliedsmethoden zugreift! !

Erstellen Sie hier beispielsweise eine polymorphe Klasse, wobei die Tierklasse links und die Katzenklasse rechts eine Unterklasse der Tierklasse ist.

animal a=new cat();
  • Zu diesem Zeitpunkt hängt der polymorphe Zugriff auf Elementvariablen, ob er kompiliert oder ausgeführt wird, davon ab, ob sich ein Tier in der Klasse befindet. Wenn Sie auf Elementvariablen zugreifen, basieren Kompilieren und Ausführen daher auf der linken Seite.

  • Beim polymorphen Zugriff auf Mitgliedsmethoden betrachtet der Compiler das Tier und beim Ausführen die Katze. Das heißt, zum Zeitpunkt der Kompilierung wird geprüft, ob und wann das Tier auf der linken Seite über diese Methode verfügt Wird ausgeführt, wird die Methode in cat auf der rechten Seite angezeigt. Wenn Sie auf Member-Methoden zugreifen, kompilieren und überprüfen Sie sie auf der linken Seite und führen Sie sie aus, um auf der rechten Seite anzuzeigen


Der Vorteil von Multibanding besteht darin, dass Sie beim Definieren der Methode den übergeordneten Typ als Parameter verwenden und den spezifischen Subtyp verwenden, um an der Operation teilzunehmen, wenn diese in Zukunft verwendet wird.

Sie können sehen, dass Sie jedes Mal, wenn Sie eine neue Klasse in der obigen animalOperation-Klasse definieren, die Methode der Klasse neu schreiben müssen. Polymorphismus löst dieses Problem. Sie können den obigen Code in diesen ändern und die übergeordnete Klasse direkt als Parameter verwenden ., Und die Unterklasse kann direkt beim Aufruf verwendet werden.


public class animalOperation {
    
    
	
	public void useAnimal(animal a) {
    
    
		//等同于animal a=new cat();
		//animal a=new dog();
		a.eat();
	}
}

Ich denke du magst

Origin blog.csdn.net/weixin_45102820/article/details/113122246
Empfohlen
Rangfolge