为了账号安全,请及时绑定邮箱和手机立即绑定

在子类中使用父类的方法时,改变方法中调用的字段/field

在子类中使用父类的方法时,改变方法中调用的字段/field

泛舟湖上清波郎朗 2019-02-20 03:37:32
大家好,我在工作遇到这样的问题, 之前我有父类Home和子类SmallHome,子类SmallHome原本希望使用继承于父类的printHome方法,同时因为子类的field name不同于父类,所以希望printHome方法可以调用子类中重新定义的name,也就是让子类的对象调用printHome方法时,可以打印出"little sweet home"。 为了实现这一目标,第一版写成了如下代码,把父类中的printHome方法复制粘贴进了子类加以Override,以确保子类对象使用printHome方法时,使用的name来自于子类,而不是父类。我感觉这样写很不好,因为在我的实际工作中,printHome方法会很长,这样子做不太符合代码复用的风格。 package com.test; public class Home { protected String name = "sweet home"; public void printName() { System.out.println(name()); } } package com.test; public class SmallHome extends Home { protected String name = "little sweet home"; @Override public void printName() { System.out.println(name); } } 在stackoverflow里请教后,代码可以做如下修改,也就是改用方法去定义printHome中所需要的那个值。 package com.test; public class Home { protected String name() { return "sweet home";} public void printName() { System.out.println(name()); } } package com.test; public class SmallHome extends Home { @Override protected String name() { return "little sweet home";} } 自此虽然问题有了这么个解决方法,但是我还是不大明白,在修改后的代码里,子类对象调用printHome方法时,调用的name()方法,为什么是子类中Override后的name()? 请了解的同学帮忙解释下,谢谢!
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

多态是针对方法的,会在运行时根据对象的类型找应该调用的方法,字段就不会,是死的。

查看完整回答
反对 回复 2019-03-01
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

你已经重写了父类的方法了啊。感觉没啥好解释的。

查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信