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.
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 } }
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)); } }
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 */ } }
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.
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.
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 } }
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)); } }
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 } }
à 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.
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.
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 } }
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)); } }
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 */ } }
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) !