黑马程序员技术交流社区

标题: 父类对象在内存中位置的问题 [打印本页]

作者: yijincheng    时间: 2016-3-20 14:37
标题: 父类对象在内存中位置的问题
在new 类名();执行后,
代码的执行顺序应该是
1.子类构造进栈;
2.父类构造进栈;
3.父类构造出栈;
4.子类构造出栈;
应该是这样没错吧?
那么问题是,系统是否也给父类实例化了一个对象在内存中?
作者: fei9ci    时间: 2016-3-20 23:23
本帖最后由 fei9ci 于 2016-3-21 23:08 编辑

class Test{
        public static void main(String[] args) {
                Son s = new Son();
                s.show();
                s.speak();
        }
}

class Father {
        int num1 = 1;
        public void speak() {
                System.out.println("i am father");
        }
}

class Son extends Father {
        public void show() {
                System.out.println(num1 + "son");
        }

}
运行结果
1son
i am fathe

作者: yijincheng    时间: 2016-3-20 23:26
fei9ci 发表于 2016-3-20 23:23
class Test{
        public static void main(String[] args) {
                Son s = new Son();

如果父类是抽象类呢?
作者: fei9ci    时间: 2016-3-20 23:34
抽象类不能被实例
作者: yijincheng    时间: 2016-3-20 23:45
fei9ci 发表于 2016-3-20 23:34
抽象类不能被实例

那么子类时从哪里获得的父类的属性和方法的?
作者: fei9ci    时间: 2016-3-20 23:51
调用父类的构造方法不代表就生成了对象
作者: a302550641    时间: 2016-3-20 23:53
父类虽然不能实例化,但是有构造方法,子类继承父类后,继承了父类的构造方法,然后在子类中初始化

好像是这样·····不确定
作者: fei9ci    时间: 2016-3-21 23:07
子类调用父类中的构造方法,是通过super在内存中创建对象来实现的,今天问过




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