当前位置: 代码迷 >> 综合 >> Java---面向对象---多态
  详细解决方案

Java---面向对象---多态

热度:62   发布时间:2023-10-21 18:16:12.0

什么是多态?

同一行为的多种不同表达,或者同一行为的多种不同实现就叫做多态。

例如:

1)Person,Student,Teacher之间的关系
2)有一个“车”的父类,宝马继承自车,奔驰继承自车。那么,车可以是宝马,也可以是奔驰,具有不同的形态,这种现象就叫多态。  
3) “笔”是父类,钢笔、铅笔、圆珠笔是子类。这时如果请你给我一支笔写字,你可以给任意一支笔。

运行规则:

方法覆盖后出现的运行时多态,其运行规则是:编译时看数据类型,运行时看实际的对象类型(new谁调谁)。

匹配原则:

先: 确保参数完全匹配O的前提下,依次匹配this与super。
再: 考虑参数用super(O)渐近匹配O,依次匹配this与super
当: 存在子类覆盖父类方法时,根据new子类实例的原则,先调子类方法。

匹配顺序:

this.show( O )  →  super.show( O )   →   this.show( super(O) )   →   super.show( super(O) )

public class A {public String show(D obj){  return ("A and D");  }   public String show(A obj){  return ("A and A");  }   
}
public class B extends A {public String show(B obj) {return ("B and B");}public String show(A obj) {return ("B and A");}
}
public class C extends B {}
public class D extends B {}
public class Demo {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();System.out.println(a1.show(b)); // ① A and A this.show( super(O) )System.out.println(a1.show(c)); // ② A and A this.show( super(O) )System.out.println(a1.show(d)); // ③ A and D this.show( super(O) )System.out.println(a2.show(b)); // ④ B and A super.show( super(O) )System.out.println(a2.show(c)); // ⑤ B and A super.show( super(O) )System.out.println(a2.show(d)); // ⑥ A and D super.show( O )System.out.println(b.show(b)); // ⑦ B and B this.show( O )System.out.println(b.show(c)); // ⑧ B and B this.show( super(O) )System.out.println(b.show(d)); // ⑨ A and D super.show( O )}
}