开发者社区> 问答> 正文

在多态时遇到这个问题

在《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 实际引用的方法是哪个呢 还是说第二个根本无法通过编译呢?

展开
收起
蛮大人123 2016-03-23 16:10:41 2087 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    同是java新手,分享一些我对多态的认识.
    首先对于多态存在的条件:
    1.父类引用子类对象,如: Animal a=new Dog();
    2.子类中存在对父类方法的重写.如:Dog类中重写了Animal类的bark方法.
    那么 当调用 a.bark(); 实际上调用的是Dog类中重写了的bark方法.
    回过头来看你的问题: 对于第一种情况:
    如果 a没有引用子类对象Dog 那么它调用的是自身的bark.
    如果a引用了子类对象Dog, 那么它调用的是Dog的bark;
    对于第二种情况,,有点云里雾里的感觉!!!!
    首先 ,虽然object是所有类的父类,但是它并没有bark方法,更别谈多态(多态存在的条件),所以编译无法通过.
    最后关于多态的意义所在,目前的理解的,增加程序的可扩展性(重点),可维护性.

    2019-07-17 19:11:26
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多