黑马程序员技术交流社区

标题: 那么,问题来了 [打印本页]

作者: 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()方法,但是变量没有被覆盖还是调用的是父类的变量


作者: keviner    时间: 2015-8-17 23:40
继承中,子类调用父类构造方法,子类覆盖父类方法,父类调用被覆盖方法实际上还是子类方法(就是说,子类覆盖方法,无论父类调用还是子类调用,统统用子类的方法),主要看子类,再看父类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2