java 继承与多态->方法调用优先级

调用顺序:

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{

}

输出结果:

注:转载请注明文章出处

发布了6 篇原创文章 · 获赞 4 · 访问量 33

猜你喜欢

转载自blog.csdn.net/qq_44787993/article/details/105716429