Heim  >  Artikel  >  Java  >  Eine Ergänzung zum Polymorphismus in Java

Eine Ergänzung zum Polymorphismus in Java

无忌哥哥
无忌哥哥Original
2018-07-23 10:39:331297Durchsuche

Java-Referenztypen haben zwei Typen: einer ist ein Typ zur Kompilierungszeit und der andere ist ein Laufzeittyp. Der Typ zur Kompilierungszeit wird durch den Typ bestimmt, der bei der Deklaration der Variablen verwendet wurde, und der Typ zur Laufzeit wird durch das Objekt bestimmt, das der Variablen tatsächlich zugewiesen ist. Wenn der Kompilierzeittyp und der Laufzeittyp inkonsistent sind, kann es zu einem sogenannten Polymorphismus kommen.

public class BaseClass {

	public int book = 6;
	public void base() {
		System.out.println("父类中的普通方法");
	}
	public void text() {
		System.out.println("父类中被覆盖的方法");
	}
}
public class subClass extends BaseClass{
	public String book ="java";
	public void text() {
		System.out.println("子类中覆盖父类的方法");
	}
	public void sub() {
		System.out.println("子类中的普通方法");
	}
	public static void main(String[] args) {
		//下面编译时类型和运行时类型完全一样,所以不存在多态
		BaseClass bc = new BaseClass();
		System.out.println(bc.book);
		//下面两次调用的是BaseClass的方法
		bc.text();
		bc.base();
		subClass sc = new subClass();
		System.out.println(sc.book);
		//下面调用的是subClass类的方法
		sc.sub();
		sc.text();
		//下面编译时类型与运行时类型是不一样的,就是所谓的多态
		BaseClass bs = new subClass();
		System.out.println(bs.book);
		bs.text();
		bs.base();
		//bs.sub();
		//bs是父类的类型,他访问的是父类的shi'li'bian'liang
	}
	
}

Drei Variablen werden in der main()-Methode des obigen Programms erstellt. Die ersten beiden Referenzvariablen, ihr Kompilierzeittyp und ihr Laufzeittyp, sind genau gleich, also ihre Mitgliedsvariablen und Mitglieder werden aufgerufen Die Methode ist ganz normal, aber der Kompilierzeittyp der dritten Variablen stimmt nicht mit dem Laufzeittyp überein. Wenn die Textmethode dieser Referenzvariablen aufgerufen wird, wird die Methode in der übergeordneten Klasse definiert und überschrieben In der Unterklasse wird die eigentliche Methode ausgeführt. Es handelt sich um eine Methode, die die übergeordnete Klasse in der Unterklasse überschreibt.

Java ermöglicht die direkte Zuweisung eines Unterklassenobjekts zu einer Referenzvariablen einer übergeordneten Klasse ohne Typkonvertierung oder wird als Aufwärtskonvertierung bezeichnet. Die Aufwärtskonvertierung wird vom System automatisch abgeschlossen.

Wenn die Methode, die auf eine Variable verweist, zur Laufzeit aufgerufen wird, zeigt ihr Methodenverhalten immer die Verhaltensmerkmale der Unterklasse, nicht die Verhaltensmerkmale der übergeordneten Klasse. Dies kann passieren: Derselbe Variablentyp ist der Fall Rufen Sie nicht dieselbe Methode auf. Eine Möglichkeit besteht darin, unterschiedliche Verhaltensmerkmale anstelle der Verhaltensmerkmale der übergeordneten Klasse darzustellen.

Im Gegensatz zu Methoden weisen Instanzvariablen von Objekten keinen Polymorphismus auf.

结果:
6
父类中被覆盖的方法
父类中的普通方法
java
子类中的普通方法
子类中覆盖父类的方法
6
子类中覆盖父类的方法
父类中的普通方法

Hinweis

  1. Eine Referenzvariable kann ihren Typ zur Kompilierungszeit nur während der Kompilierungsphase aufrufen .-Methode, aber die Laufzeit führt die Methoden aus, die ihr Laufzeittyp hat, sodass eine Referenzvariable beim Schreiben von Java-Code nur Methoden in der Klasse aufrufen kann, in der die Variable deklariert ist.

  2. Beim Zugriff auf eine enthaltene Instanzvariable durch Verweis auf eine Typvariable versucht das System immer auf die Kompilierung zuzugreifen, in der die Variable wird definiert, wenn der Typ ausgeführt wird, nicht, wenn er ausgeführt wird.

Das obige ist der detaillierte Inhalt vonEine Ergänzung zum Polymorphismus in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn