【Java多态疑问】

握草 2018-01-06 10:36:54
疑问如下:
我们知道,Java中子类可以继承父类的方法和属性(private看作隐式继承,通过get方法可得),可是

为什么向上转型即父类引用子类时,父类的普通方法叫“覆盖”,静态方法叫“隐藏”(就是转型后就调用父类的方法了);而属性则只可以被“隐藏”却不能“覆盖”呢?


希望大家不要吝惜自己的想法,如果可以结合实例或者底层说说就更好了
...全文
309 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
云楼 2018-01-09
  • 打赏
  • 举报
回复
生成子类对象时并不会同时生成父类对象 当调用普通方法时,相当于(this.方法名),因为没有父类对象,所以this只能指向子类对象,调用子类的方法 当调用静态方法时,静态方法也被称为类方法,无需构造对象用类名可以直接调用,所以调用时是(类名.方法名),父类存在,所以向上转型时调用父类的静态方法。
oyljerry 2018-01-07
  • 打赏
  • 举报
回复
转成父类就要用多态方式调用子类实现
qq_39449585 2018-01-07
  • 打赏
  • 举报
回复
我的理解是:多态需要继承+覆盖方法+父类引用指向子类对象。 当你调用非静态且不是private的方法时时,会将该对象的引用传递给方法,会根据实际的对象调用,因此叫“覆盖”。 而静态方法只需通过类名调用就可以了,如果通过对象调用也不会传递对象引用给方法,根据引用的类型调用。
Lie_lei 2018-01-07
  • 打赏
  • 举报
回复
我觉得可以这么理解,你继承了你父亲的优点,你不说你是从你父亲那里继承的优点,谁会知道呢。在外人认为是自己的优点,你父亲依旧有这些优点,只是被你隐藏起来啦。这样我觉得很好理解。
Dean丿霸王 2018-01-07
  • 打赏
  • 举报
回复
继承不是类的继承,是子类的对象的继承,子类对象可以调用父类的属性和方法,覆盖是指你子类不想用父类的方法的内容,想重新写一个。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧