A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© deng2242 中级黑马   /  2015-8-17 22:07  /  440 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这个程序运行的结果让人不理解。
运行结果为:
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();
    }

}

2 个回复

倒序浏览
这个题目很有意思
Parent is creating..//不理解 --- 这个好理解,子类在实例化时都会调用父类的默认构造函数,一个简单的常识
Son is eat: 0//不理解 --- 这个呢 我的理解是 子类中eat()方法覆盖了父类的方法,虽然是在父类的默认函数中调用eat(),但是是执行的是被覆盖的子类eat()方法,但是变量没有被覆盖还是调用的是父类的变量

回复 使用道具 举报
继承中,子类调用父类构造方法,子类覆盖父类方法,父类调用被覆盖方法实际上还是子类方法(就是说,子类覆盖方法,无论父类调用还是子类调用,统统用子类的方法),主要看子类,再看父类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马