jiladahe1997 2015-12-01 13:32 采纳率: 100%
浏览 1560
已采纳

JAVA 新手 在多态时遇到这个问题

在《Head First JAVA》这本书中看到一句话 :只有在引用变量的类型就是带有某方法的类型时才能调用该方法。
那么在使用多态时 比如public void Dog(Animal a){
a.bark(); }//其中Animal是Dog的父类 bark这个方法在Animal和Dog中都有 并且在b中进行了重写
public void Dog(object a){
a.bark();}
那么I和II 实际引用的方法是哪个呢 还是说第二个根本无法通过编译呢??

  • 写回答

3条回答 默认 最新

  • jiji1995 2015-12-01 13:46
    关注

    同是java新手,分享一些我对多态的认识.
    首先对于多态存在的条件:
    1.父类引用子类对象,如: Animal a=new Dog();
    2.子类中存在对父类方法的重写.如:Dog类中重写了Animal类的bark方法.
    那么 当调用 a.bark(); 实际上调用的是Dog类中重写了的bark方法.

    回过头来看你的问题: 对于第一种情况:
    如果 a没有引用子类对象Dog 那么它调用的是自身的bark.
    如果a引用了子类对象Dog, 那么它调用的是Dog的bark;

    对于第二种情况,,有点云里雾里的感觉!!!!
    首先 ,虽然object是所有类的父类,但是它并没有bark方法,更别谈多态(多态存在的条件),所以编译无法通过.

    最后关于多态的意义所在,目前的理解的,增加程序的可扩展性(重点),可维护性.

    如果回答的不好请轻喷>_<.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog