Maison > Java > javaDidacticiel > 03.Bases de Java - Polymorphisme

03.Bases de Java - Polymorphisme

黄舟
Libérer: 2017-02-27 10:13:11
original
1403 Les gens l'ont consulté

Concepts de base

Le polymorphisme est la capacité d'un même comportement à avoir plusieurs manifestations ou formes différentes.

Le polymorphisme est l'incarnation de multiples expressions d'objets.

Conditions du polymorphisme : Héritage, réécriture, transformation ascendante

La liaison dynamique est une forme spécifique d'implémentation polymorphe.


Exemple d'étude

Ce qui suit est un exemple pour vérifier le concept ci-dessus.

// 车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
    }
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

En observant le code, différents contenus sont imprimés lors de l'appel de la méthode show de Car, qui reflète le polymorphisme de la classe. Dans le même temps, l'exemple remplit également les trois conditions de base pour que le polymorphisme se produise :

  • Hérité : Toyota et Buick héritent de Car

  • Réécriture : Toyota et Buick réécrivent la méthode d'exposition de Car

  • Transformation vers le haut : La montée en puissance se produit lors de la création de Toyota et Transformation des objets Buick


Regardons un sujet typique :

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

    }
}
Copier après la connexion
Copier après la connexion

Constructeur et polymorphisme

Explorez de la même manière à travers un exemple

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
         */
    }
}
Copier après la connexion
Copier après la connexion

Grâce au contenu de sortie, nous pouvons voir que le constructeur de Parent appelle Son's print() en raison d'une liaison dynamique puisque num n'a pas été initialisé, ce qui donne une valeur. de 0.

Concepts de base

Le polymorphisme est la capacité d'un même comportement à avoir plusieurs manifestations ou formes différentes.

Le polymorphisme est l'incarnation de multiples expressions d'objets.

Conditions du polymorphisme : Héritage, réécriture, transformation ascendante

La liaison dynamique est une forme spécifique d'implémentation polymorphe.


Exemple d'étude

Ce qui suit est un exemple pour vérifier le concept ci-dessus.

// 车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
    }
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

En observant le code, différents contenus sont imprimés lors de l'appel de la méthode show de Car, qui reflète le polymorphisme de la classe. Dans le même temps, l'exemple remplit également les trois conditions de base pour que le polymorphisme se produise :

  • Hérité : Toyota et Buick héritent de Car

  • Réécriture : Toyota et Buick réécrivent la méthode d'exposition de Car

  • Transformation vers le haut : La montée en puissance se produit lors de la création de Toyota et Transformation des objets Buick


Regardons un sujet typique :

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

    }
}
Copier après la connexion

Constructeur et polymorphisme

Explorez de la même manière les résultats de l'analyse

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
    }
}
Copier après la connexion

à travers un exemple. En fait, cela implique trois contenus :

  • Fils En cours d'instanciation, Parent Le constructeur. du Parent est exécuté en premier.

  • Son remplace la méthode d'impression, donc Parent appelle la méthode réécrite de Son.

  • Dans Parent puisque num n'a pas encore été initialisé, la valeur est 0.

Concepts de base

Le polymorphisme est la capacité d'un même comportement à avoir plusieurs manifestations ou formes différentes.

Le polymorphisme est l'incarnation de multiples expressions d'objets.

Conditions du polymorphisme : Héritage, réécriture, transformation ascendante

Liaison dynamique est la forme spécifique d'implémentation polymorphe.


Exemple d'étude

Ce qui suit est un exemple pour vérifier le concept ci-dessus.

// 车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
    }
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

En observant le code, différents contenus sont imprimés lors de l'appel de la méthode show de Car, qui reflète le polymorphisme de la classe. Dans le même temps, l'exemple remplit également les trois conditions de base pour que le polymorphisme se produise :

  • Hérité : Toyota et Buick héritent de Car

  • Réécriture : Toyota et Buick réécrivent la méthode d'exposition de Car

  • Transformation vers le haut : La montée en puissance se produit lors de la création de Toyota et Transformation des objets Buick


Regardons un sujet typique :

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

    }
}
Copier après la connexion
Copier après la connexion

Constructeur et polymorphisme

Explorez de la même manière à travers un exemple

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
         */
    }
}
Copier après la connexion
Copier après la connexion

Grâce au contenu de sortie, nous pouvons voir que le constructeur de Parent appelle Son's print() en raison d'une liaison dynamique puisque num n'a pas été initialisé, ce qui donne une valeur. de 0.

Les résultats de l'analyse impliquent en fait trois contenus :

  • Fils Dans le processus d'instanciation, le constructeur de Parent et le constructeur de Parent sont exécutés en premier.

  • Son remplace la méthode d'impression, donc Parent appelle la méthode réécrite de Son.

  • Dans Parent puisque num n'a pas encore été initialisé, la valeur est 0.

Ce qui précède concerne les bases de 03.Java - contenu polymorphe. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal