a1670131049
2017-10-10 06:13
采纳率: 50%
浏览 1.4k
已采纳

java多态和继承中,方法的调用

  1. class Fu{ void show() { System.out.println("Fu"); } } class Zi extends Fu{ void show() { System.out.println("Zi"); } } public class Dream { public static void main(String args[]) { Fu f=new Zi(); f.show(); } } f调用show()方法,输出的结果是 “Zi”,因为覆盖了,可是把Fu类的show()方法删除为什么会报错?既然多态了,f指向Zi类,那么不可以去Zi类中找show()方法吗?
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • legendCoder 2017-10-10 07:15
    已采纳

    Fu f=new Zi()这句话是父类的变量指向子类实例对象。但是f始终是父类类型的一个变量,父类中没有的方法是不能调用的。之所以f.show()显示的是zi,是因为子类show方法覆盖了父类show方法,相当于重写了。

    已采纳该答案
    打赏 评论
  • number1killer 2017-10-10 07:13

    子类和父类的关系你似乎不太清楚。

    打赏 评论
  • baidu_38996156 2017-10-10 07:19

    重写多态特性,有同名方法调用子类的;父类中没有show()方法,子类中有不属于重写,f为父类的引用,f.show()调用父类中的show()方法,此时父类中没有此方法,所以会报错

    打赏 评论
  • pursuit_by_happiness 2017-10-10 07:32

    你好像没有理解方法重写的含义

    打赏 评论
  • Cicizz_ 2017-10-10 07:33

    这里有三个比较重要的概念:多态;重写与java编译时与运行时状态。
    你所说的删除掉父类的show()方法后,实际是编译时报的错,因为在编译时类型是基类类型,而运行时是指向的实际对象的方法的类型,编译的基类
    里没有该方法,当然会报错。

    打赏 评论
  • qq_40260973 2017-10-10 08:23

    你用的是父类的类型创建的f对象,虽然用的是子类的构造器,可是类型是父类的啊,父类明显删除以后明显没有这个方法,编译器就认为没有这个方法。
    如果用子类类型创建对象,删了父类的方法也可以,不过这个不是父类继承来的方法,是子类的方法了吧。比如Zi f=new Zi();

    打赏 评论
  • xiaohe66 2017-10-10 09:51

    删除父类show方法后,父类就没有show方法了。调用不存在的方法,当然会报错。

    打赏 评论

相关推荐 更多相似问题