Heim >Java >javaLernprogramm >03.Java-Grundlagen – Polymorphismus
Polymorphismus ist die Fähigkeit desselben Verhaltens, mehrere verschiedene Erscheinungsformen oder Formen anzunehmen.
Polymorphismus ist die Verkörperung mehrerer Ausdrucksformen von Objekten.
Bedingungen für Polymorphismus: Vererbung, Umschreiben, Aufwärtstransformation
Dynamische Bindung ist eine spezifische Form der polymorphen Implementierung.
Das Folgende ist ein Beispiel, um das obige Konzept zu überprüfen.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
Beobachtet man den Code, werden beim Aufruf der Show-Methode von Car unterschiedliche Inhalte gedruckt, was den Polymorphismus der Klasse widerspiegelt. Gleichzeitig erfüllt das Beispiel auch die drei Grundbedingungen für das Auftreten von Polymorphismus:
Geerbt: Toyota und Buick erben von Car
Umschreiben: Toyota und Buick schreiben die Show-Methode des Autos neu
Aufwärtstransformation: Nach oben tritt bei der Entwicklung von Toyota und auf Buick-Objekte Transformation
Schauen wir uns ein typisches Thema an:
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A, 且 B 是 A 的子类,调用类 A 的 show(A obj) 方法 // 但是由于 B 中重写了 show(A obj) 方法,导致运行期间发生的动态绑定,调用 类 B 的 show(A obj) 方法 // ,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
Erkunden Sie es ähnlich anhand eines Beispiels
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 重写(override)了父类方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); /** * 输出内容: * I am a Son 0 * I am a Son 1 */ } }
Anhand des Ausgabeinhalts können wir sehen, dass der Konstruktor von Parent Sons print() aufruft, da num nicht initialisiert wurde, was zu einem Wert führt von 0.
Polymorphismus ist die Fähigkeit desselben Verhaltens, mehrere verschiedene Erscheinungsformen oder Formen anzunehmen.
Polymorphismus ist die Verkörperung mehrerer Ausdrucksformen von Objekten.
Bedingungen für Polymorphismus: Vererbung, Umschreiben, Aufwärtstransformation
Dynamische Bindung ist eine spezifische Form der polymorphen Implementierung.
Das Folgende ist ein Beispiel, um das obige Konzept zu überprüfen.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
Beobachtet man den Code, werden beim Aufruf der Show-Methode von Car unterschiedliche Inhalte gedruckt, was den Polymorphismus der Klasse widerspiegelt. Gleichzeitig erfüllt das Beispiel auch die drei Grundbedingungen für das Auftreten von Polymorphismus:
Geerbt: Toyota und Buick erben von Car
Umschreiben: Toyota und Buick schreiben die Show-Methode des Autos neu
Aufwärtstransformation: Nach oben tritt bei der Entwicklung von Toyota und auf Buick-Objekte Transformation
Schauen wir uns ein typisches Thema an:
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A,应该是调用类 A 的 show(A obj) 方法 // 由于 B 中重写了 show(A obj) 方法,实际调用 类 B 的方法,,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
Untersuchen Sie auf ähnliche Weise die
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 关键 -> 重写了父类的方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); // 输出内容: // I am a Son 0 // I am a Son 1 } }
Analyseergebnisse anhand eines Beispiels. Tatsächlich handelt es sich um drei Inhalte:
Son Im Prozess der Instanziierung, Parent Der Konstruktor von Parent wird zuerst ausgeführt.
Son überschreibt die Druckmethode, daher ruft Parent die umgeschriebene Methode von Son auf.
In Parent ist der Wert 0, da num noch nicht initialisiert wurde.
Polymorphismus ist die Fähigkeit desselben Verhaltens, mehrere unterschiedliche Erscheinungsformen oder Formen anzunehmen.
Polymorphismus ist die Verkörperung mehrerer Ausdrucksformen von Objekten.
Bedingungen für Polymorphismus: Vererbung, Umschreiben, Aufwärtstransformation
Dynamische Bindung ist eine spezifische Form der polymorphen Implementierung.
Das Folgende ist ein Beispiel, um das obige Konzept zu überprüfen.
// 车class Car { public void show(){ System.out.println("This is a car"); } }//丰田class Toyota extends Car{ public void show(){ System.out.println("This is a Japan car"); } }//别克class Buick extends Car{ public void show(){ System.out.println("This is a USA car"); } }public class Test{ public static void main(String[] args) { Car c1 = new Toyota(); Car c2 = new Buick(); c1.show(); c2.show(); // 打印内容: // This is a Japan car // This is a USA car } }
Beobachtet man den Code, werden beim Aufruf der Show-Methode von Car unterschiedliche Inhalte gedruckt, was den Polymorphismus der Klasse widerspiegelt. Gleichzeitig erfüllt das Beispiel auch die drei Grundbedingungen für das Auftreten von Polymorphismus:
Geerbt: Toyota und Buick erben von Car
Umschreiben: Toyota und Buick schreiben die Show-Methode des Autos neu
Aufwärtstransformation: Nach oben tritt bei der Entwicklung von Toyota und auf Buick-Objekte Transformation
Schauen wir uns ein typisches Thema an:
class A { public String show(A obj) { return ("A and A"); } public String show(D obj) { return ("A and D"); } } class B extends A { public String show(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } } class C extends B { } class D extends B { }public class Test { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); // 1.因此 B 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(b)); // 2.因为 C 是 A 的子类,调用类 A 的 show(A obj) 方法,输出:A and A System.out.println(a1.show(c)); // 3.调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a1.show(d)); // 4.因为 B 向上转型成 A, 且 B 是 A 的子类,调用类 A 的 show(A obj) 方法 // 但是由于 B 中重写了 show(A obj) 方法,导致运行期间发生的动态绑定,调用 类 B 的 show(A obj) 方法 // ,输出:B and A System.out.println(a2.show(b)); // 5.同上 System.out.println(a2.show(c)); // 6.B 向上转型成 A,默认调用类 A 的 show(D obj) 方法,输出:A and D System.out.println(a2.show(d)); // 7.调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(b)); // 8.C 是 B 的子类,调用类 B 的 show(B obj) 方法,输出:B and B System.out.println(b.show(c)); // 9.调用继承自类 A 的 show(D obj) 方法,输出:A and D System.out.println(b.show(d)); } }
Erkunden Sie dies anhand eines Beispiels
class Parent { void print() { System.out.println("I am a Parent"); } Parent() { print(); } } class Son extends Parent { int num = 1; // 重写(override)了父类方法 void print() { System.out.println("I am a Son " + num); } Son() { print(); } }public class Test { public static void main(String[] args) { Son son = new Son(); /** * 输出内容: * I am a Son 0 * I am a Son 1 */ } }
Anhand des Ausgabeinhalts können wir sehen, dass der Konstruktor von Parent Sons print() aufruft, da num nicht initialisiert wurde, was zu einem Wert führt von 0.
Die Analyseergebnisse umfassen tatsächlich drei Inhalte:
Son Im Instanziierungsprozess werden zuerst der Konstruktor von Parent und der Konstruktor von Parent ausgeführt.
Son überschreibt die Druckmethode, daher ruft Parent die umgeschriebene Methode von Son auf.
In Parent ist der Wert 0, da num noch nicht initialisiert wurde.
Das Obige ist 03.Java-Grundlagen – polymorpher Inhalt Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!