日期:2014-05-20  浏览次数:20709 次

继承父类的方法是操作的父类成员变量吗?
当子类继承了父类,老师说“子类就拥有了父类所有非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方法在父类里面,所以打印的也就是父类的值,跟子类无关。

希望这个答案对你有帮助