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