标题: 那么,问题来了 [打印本页] 作者: deng2242 时间: 2015-8-17 22:07 标题: 那么,问题来了 下面这个程序运行的结果让人不理解。
运行结果为:
Parent is creating..//不理解
Son is eat: 0//不理解
Son is creating..
Son is eat: 1
主要是前2句不理解。请高手详细说明之。谢谢
Java code
/**
*Parent.java
*/
public class Parent {
private int eatID=0;
public Parent(){
System.out.println("Parent is creating..");
eat();
}
public void eat(){
System.out.println("Parent is eat: "+eatID);
}
}
Java code
/**
*Son.java
*/
public class Son extends Parent {
private int eatID=1;
public Son(){
System.out.println("Son is creating..");
eat();
}
public void eat(){
System.out.println("Son is eat: "+eatID);
}
@SuppressWarnings(value={"unused"})
public static void main(String[] args){
Parent p=new Son();
}
}作者: liuch111 时间: 2015-8-17 22:55
这个题目很有意思
Parent is creating..//不理解 --- 这个好理解,子类在实例化时都会调用父类的默认构造函数,一个简单的常识
Son is eat: 0//不理解 --- 这个呢 我的理解是 子类中eat()方法覆盖了父类的方法,虽然是在父类的默认函数中调用eat(),但是是执行的是被覆盖的子类eat()方法,但是变量没有被覆盖还是调用的是父类的变量