阿尔托利雅-潘德拉贡 2015-12-19 14:58 采纳率: 0%
浏览 1335

JAVA多态问题,求指教。谦虚滴不要

package test;

public class Test1{

public static void main(String arg[]){

        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(a2.show(b));   
    System.out.println(a2.show(c));   
    System.out.println(a2.show(d));   //A-D
    System.out.println(b.show(b));     
    System.out.println(b.show(c));     
    System.out.println(b.show(d));  

}

}

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(A obj){
       return ("B and A");
}
public String show(B obj){
    return ("B and B");
}

}
class C extends B{

 public String show(C obj){
     return ("C and C");
  }
  public String show(B obj){
         return ("B and C");
  }

}
class D extends B{

 public String show(D obj){
     return ("D and D");
  }
  public String show(B obj){
         return ("B and D");
  }

}
A and A
A and A
A and D
B and A
B and A
A and D
B and B
B and B
A and D

为什么第4个输出不是B and B而是 B and A明明入参就是B类啊,现实让我懵逼。求解答

  • 写回答

2条回答 默认 最新

  • 晓呆同学 2015-12-19 15:37
    关注

    如果在子类中定义某方法与其父类有**相同的名称和参数**,我们说该方法被重写 (Overriding)。

    类A中的方法show(A obj) 跟类B中的方法show(B obj)因为参数不同(虽然是有继承关系,但也必须是相同才行),
    所以类B中的这个方法并不是对类A中方法的重写,它们之间并没有关系。

    A a2 = new B();这样定义的a2对象,只有show(D obj)和show(A obj)方法,并且类B中的show(A obj)方法对A中的show(A obj)方法重写了,我们在调用的时候,就会走类B中的show(A obj)方法,所以输出是B and A

    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?