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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 硫氢化铁 中级黑马   /  2015-8-12 18:32  /  810 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在子类的构造函数中为什么一定会调用父类的某个构造函数
//定义Animal类class Animal{
      //定义Animal类有参数的构造函数方法
     public Animal(){        System.out.println("这是一只动物");
     }    //定义Animal类有参数的构造函数方法    public Animal(String name){        System.out.println("这只狗叫"+name);    }}//定义Dog类继承Animal类class Dog extends Animal{      public Dog(){        //方法体中无代码    }}//定义测试类public class Demo4{    public static void main(String[] args){        Dog dog=new Dog();    //实例化子类Dog对象    }}
这个代码的输出结果是“这是一只动物”,谁能给解释一下这个结论,谢了

12 个回复

倒序浏览
因为父类也需要进行初始化操作!
回复 使用道具 举报
因为super。。。
回复 使用道具 举报
没人吗...........
回复 使用道具 举报

但是构造函数里面里面并没有写this.super();啊
回复 使用道具 举报
硫氢化铁 发表于 2015-8-12 19:13
但是构造函数里面里面并没有写this.super();啊

默认的隐式语句
回复 使用道具 举报
thoris 发表于 2015-8-12 19:15
默认的隐式语句

那是不是这样,如果写出了this.super("动物");那么就会调用有参的父类构造函数,如果什么都没写,就会默认调用父类无参的构造函数?
回复 使用道具 举报
thoris 中级黑马 2015-8-12 19:36:02
8#
硫氢化铁 发表于 2015-8-12 19:23
那是不是这样,如果写出了this.super("动物");那么就会调用有参的父类构造函数,如果什么都没写,就会默 ...

是的   父类如果只有有参的构造函数   子类必须要重写有参的构造函数 不然会报错
回复 使用道具 举报
thoris 发表于 2015-8-12 19:36
是的   父类如果只有有参的构造函数   子类必须要重写有参的构造函数 不然会报错 ...

这样啊,多谢
回复 使用道具 举报
子父类构造函数的问题!
子类的构造函数一定会访问父类中的构造函数。
1 如果父类中有空参数的构造函数,就算子类不写super语句,子类也会默认去访问。
2 如果父类中只有非参数的构造函数,而没有空参数的构造函数,
那么子类就一定要在构造函数中加上super语句,
回复 使用道具 举报
因为子类在继承父类成员变量的时候,需要看下父类是怎么构造的,
所以就会有一条隐式语句super();  初始化父类成员变量,
而且在加载中,也是要先加载super();
回复 使用道具 举报
在内存中,堆里new出一个子类对象时,这个对象里就有一个小区域是其父类的元素,如果存在继承关系,就会从顶而下创建所有父类的实例,都储存在new出来的子类里,这样子类才能实现父类所有的方法。
回复 使用道具 举报
...................................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马