黑马程序员技术交流社区

标题: 这个结论谁能解释一下 [打印本页]

作者: 硫氢化铁    时间: 2015-8-12 18:32
标题: 这个结论谁能解释一下
在子类的构造函数中为什么一定会调用父类的某个构造函数
//定义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对象    }}
这个代码的输出结果是“这是一只动物”,谁能给解释一下这个结论,谢了

作者: CharnLau    时间: 2015-8-12 18:43
因为父类也需要进行初始化操作!
作者: 大木木    时间: 2015-8-12 18:49
因为super。。。

作者: 硫氢化铁    时间: 2015-8-12 19:12
没人吗...........
作者: 硫氢化铁    时间: 2015-8-12 19:13
大木木 发表于 2015-8-12 18:49
因为super。。。

但是构造函数里面里面并没有写this.super();啊
作者: thoris    时间: 2015-8-12 19:15
硫氢化铁 发表于 2015-8-12 19:13
但是构造函数里面里面并没有写this.super();啊

默认的隐式语句
作者: 硫氢化铁    时间: 2015-8-12 19:23
thoris 发表于 2015-8-12 19:15
默认的隐式语句

那是不是这样,如果写出了this.super("动物");那么就会调用有参的父类构造函数,如果什么都没写,就会默认调用父类无参的构造函数?
作者: thoris    时间: 2015-8-12 19:36
硫氢化铁 发表于 2015-8-12 19:23
那是不是这样,如果写出了this.super("动物");那么就会调用有参的父类构造函数,如果什么都没写,就会默 ...

是的   父类如果只有有参的构造函数   子类必须要重写有参的构造函数 不然会报错
作者: 硫氢化铁    时间: 2015-8-12 19:44
thoris 发表于 2015-8-12 19:36
是的   父类如果只有有参的构造函数   子类必须要重写有参的构造函数 不然会报错 ...

这样啊,多谢
作者: pengbeilin    时间: 2015-8-12 19:48
子父类构造函数的问题!
子类的构造函数一定会访问父类中的构造函数。
1 如果父类中有空参数的构造函数,就算子类不写super语句,子类也会默认去访问。
2 如果父类中只有非参数的构造函数,而没有空参数的构造函数,
那么子类就一定要在构造函数中加上super语句,

作者: ℃葫芦    时间: 2015-8-12 20:06
因为子类在继承父类成员变量的时候,需要看下父类是怎么构造的,
所以就会有一条隐式语句super();  初始化父类成员变量,
而且在加载中,也是要先加载super();
作者: zby_allan    时间: 2015-8-12 21:06
在内存中,堆里new出一个子类对象时,这个对象里就有一个小区域是其父类的元素,如果存在继承关系,就会从顶而下创建所有父类的实例,都储存在new出来的子类里,这样子类才能实现父类所有的方法。
作者: 黑色幽默K    时间: 2015-8-12 21:34
...................................




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