调用顺序:
this.show(object)->super.show(object)->this.show(super(object))->super.show(super(object))
参见两个实例如下:
一:Animal和Dog类
public class Animal{
public void speak(Animal p){
System.out.println("Animal Speak!");
}
}
class Dog extends Animal{
public void speak(Animal p){
System.out.println("汪!");
}
public void speak(Dog p){
System.out.println("汪汪!");
}
public static void main(String[] args) {
Animal p1 = new Animal();
Animal p2 = new Dog();//p2是animal类型。。。
Dog p3 = new Dog();
//因为p1 p2 p3 都是 Animal的子类。首先调用this.show(Obj)找不到匹配方法
//然后调用this.show(super(Obj)),匹配成功,输出Animal speak
p1.speak(p1);
p1.speak(p2);
p1.speak(p3);
System.out.println("*******华丽丽的分割线*******");
//参数p1 p2都是Animal类型,父类对象p2 调用子类重写后的speak方法,直接匹配
p2.speak(p1);//汪
p2.speak(p2);//汪
//调用顺序:this.show(obj)(X)->super.show(obj)(X)->this.show(super(obj))(√)
p2.speak(p3);//汪
System.out.println("********华丽丽的分割线******");
p3.speak(p1);
p3.speak(p2);
p3.speak(p3);
}
}
输出结果:
二:大一java期末考试多态考题
public class A {
public String show(D obj){
return "D in A";
}
public String show(A obj){
return "A in A";
}
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));
System.out.println(a1.show(c));
System.out.println(a1.show(d));
System.out.println("********华丽丽的分割线******");
System.out.println(a2.show(b));
System.out.println(a2.show(c));
System.out.println(a2.show(d));
System.out.println("********华丽丽的分割线******");
System.out.println(b.show(b));
System.out.println(b.show(c));
System.out.println(b.show(d));
}
}
class B extends A{
public String show(B obj){
return "B in B";
}
public String show(A obj){
return "B in A";
}
}
class C extends B{
}
class D extends B{
}
输出结果:
注:转载请注明文章出处