Heim  >  Artikel  >  Java  >  03.Java-Grundlagen – Polymorphismus

03.Java-Grundlagen – Polymorphismus

黄舟
黄舟Original
2017-02-27 10:13:111335Durchsuche

Grundkonzepte

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.


Beispielstudie

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

    }
}

Konstruktor und Polymorphismus

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.

Grundkonzepte

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.


Beispielstudie

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

    }
}

Konstruktor und Polymorphismus

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.

Grundkonzepte

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.


Beispielstudie

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

    }
}

Konstruktor und Polymorphismus

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)!


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