当前位置: 代码迷 >> Java相关 >> 继承父类的方法是操作的父类成员变量吗?解决方案
  详细解决方案

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

热度:7409   发布时间:2013-02-25 21:47:26.0
继承父类的方法是操作的父类成员变量吗?
当子类继承了父类,老师说“子类就拥有了父类所有非private的方法”。
Java code
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”吗?



------解决方案--------------------------------------------------------
因为getMessage方法在父类里面 他怎么可能掉子类的东西 分类不能掉子类
------解决方案--------------------------------------------------------
如果你想输出222,需要在子类重写一遍
String getMessage(){
return excep;
}
将父类方法覆盖掉
------解决方案--------------------------------------------------------
我觉得一本《java编程思想》会对你非常有帮助。这本书相比你老师,或许更加优秀。还是说说你的问题。子类继承父类,如果子类重写父类的A方法,那么子类调用A方法时,会去掉用子类的A方法。如果子类未重写父类的A方法,那么子类将会调用父类的A方法。

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

在java设计者相对现实来设计时,是考虑一般儿子比父亲更加优秀,所以优先考虑调用儿子的方法。这也是重写方法的初衷。
------解决方案--------------------------------------------------------
JVM先查找子类是否有此方法,如果没有,就去找父类的。

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

希望这个答案对你有帮助
  相关解决方案