比较流行的一道多态题
class A { public String show(D obj) { return ("A and D"); } public String show(A obj) { return ("A and A"); } } class B extends A { public String show(B obj) { return ("B and B"); } public String show(A obj) { return ("B and A"); } } class C extends B {} class D extends B {} public class Main { 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)); //1 System.out.println(a1.show(c)); //2 System.out.println(a1.show(d)); //3 System.out.println(a2.show(b)); //4 System.out.println(a2.show(c)); //5 System.out.println(a2.show(d)); //6 System.out.println(b.show(b)); //7 System.out.println(b.show(c)); //8 System.out.println(b.show(d)); //9 } }
1:this.show(b) => this.show(B obj) => this.show(A obj) => A and A
2:this.show(c) => this.show(C obj) => this.show(B obj) => this.show(A obj) => A and A
3:this.show(d) => this.show(D obj) => A and D
4:this.show(b) => this.show(B obj) => this.show(A obj) => 被B覆盖 => this.show(A obj) => B and A
5:this.show(c) => this.show(C obj) => this.show(B obj) => this.show(A obj) => 被B覆盖 => this.show(A obj) => B and A
6:this.show(d) => this.show(D obj) => B无法覆盖 => A and D
7:this.show(b) => this.show(B obj) => B and B
8:this.show(c) => this.show(C obj) => this.show(B obj) => B and B
9:this.show(d) => super.show(d) => A and D