继承父类的方法是操作的父类成员变量吗?

Quester-King 2012-03-09 04:52:35
当子类继承了父类,老师说“子类就拥有了父类所有非private的方法”。
public class TestMessage {

public static void main(String[] args) {
Te t = new Te();
System.out.println(t.getMessage());
}

}

class Excep{
private String excep = "111";
String getMessage(){
return excep;
}
}

class Te extends Excep{
private String excep = "222";

}


比如像上面一样,父类的getMessage方法是返回自己的被标记为private的字符串,那子类继承过后,产生子类对象,调用这个方法,为什么还是打印父类字符串?难道不是操作自己的字符串来打印“222”吗?

...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhill 2012-03-09
  • 打赏
  • 举报
回复
JVM先查找子类是否有此方法,如果没有,就去找父类的。

getMessage方法在父类里面,所以打印的也就是父类的值,跟子类无关。

希望这个答案对你有帮助
Ansonppp 2012-03-09
  • 打赏
  • 举报
回复
我觉得一本《java编程思想》会对你非常有帮助。这本书相比你老师,或许更加优秀。还是说说你的问题。子类继承父类,如果子类重写父类的A方法,那么子类调用A方法时,会去掉用子类的A方法。如果子类未重写父类的A方法,那么子类将会调用父类的A方法。

java查找某方法过程是这样的。先查找子类是否有此方法,如果没有,就去找父类的此方法。如果父类没有,则编译出错。

在java设计者相对现实来设计时,是考虑一般儿子比父亲更加优秀,所以优先考虑调用儿子的方法。这也是重写方法的初衷。
影竹 2012-03-09
  • 打赏
  • 举报
回复
如果你想输出222,需要在子类重写一遍
String getMessage(){
return excep;
}
将父类方法覆盖掉
Quester-King 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yewuqing007 的回复:]

因为getMessage方法在父类里面 他怎么可能掉子类的东西 分类不能掉子类
[/Quote]
之前老师说的是“子类继承父类,就拥有了父类的所有方法,节省了写代码”,我就以为是等于把相同的代码写进子类。那照你这么说,其实并不是拥有了父类方法,而是可以从子类作为入口,进入父类调用方法吗?
devin_jia 2012-03-09
  • 打赏
  • 举报
回复
因为getMessage方法在父类里面 他怎么可能掉子类的东西 分类不能掉子类

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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