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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© treecolor166 中级黑马   /  2014-1-7 14:18  /  1235 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 treecolor166 于 2014-1-9 22:01 编辑

为什么子类继承了父类,在创建子类对象的时候会先执行父类的构造器

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 25分是一个圆满,他只是一个开始。并不是结.

查看全部评分

4 个回复

倒序浏览
子类实例化生成对象时,把这个类加载到JVM上,会先生成类的实例,但是new关键字有一个特殊的性质就是会先调用类的无参构造方法,如果这个类继承了父类,则子类实例化时,会先调用父类的无参构造方法,是类的一个初始化的顺序问题

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
个人理解是这样的:创建一个对象的时候初始化是必须要做的一件事。

因为子类对象继承了父类的属性和方法,所以要先对这些属性和方法进行初始化
这时就会调用父类的构造方法先进行一次初始化,然后子类自己再进行初始化!
------------我承认,理论的东西,我将不太清楚{:soso_e135:}---------------------------



评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 加油

查看全部评分

回复 使用道具 举报
因为子类对象中的构造方法里面有一个隐式的super()
回复 使用道具 举报

子类继承父类,首先应该完成父类的构造函数,因为有可能后面会用到或者修改父类的一些资源,因此得先初始化父类
class Person{
                private String name;
          public Person(String name){
                                this.name=name;
          }       
}

public class Teacher extends Person{
          private int age;
                public Teacher(String name,int age){
                                super();        //等价与  this.name=name;
                                this.age=age;
                }       
               
                public void speak(){
                                System.out.println(" 我要进云八!");       
                }
               
                public static void main(String[] args){
                                Teacher t=new Teacher("zhangSann",23);       
                                t.speak();
                }
}

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 为什么代码不放代码框里?

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马