黑马程序员技术交流社区

标题: 继承的问题 [打印本页]

作者: 914360849    时间: 2015-6-1 21:17
标题: 继承的问题
一个A类继承另一个类B,类A构造函数初始化时,为什么会默认访问父类的构造函数?
作者: hp_discuz    时间: 2015-6-1 22:30
public class B{
      public B(){
        super();
      }
}
class A extends B{
      public A(){
        super();//这是父类。
       }
}
因为A是继承B的,所以在初始化的时候要先访问B,这就好比,A是儿子,B是父亲,儿子继承了父亲的一些元素(比如,相貌,智慧等等),人家再说儿子的时候,肯定会说他是B的儿子。
说的不是太清楚,参考的看看吧。我也刚学不久。
作者: edithe    时间: 2015-6-1 22:32
本帖最后由 edithe 于 2015-6-1 22:33 编辑

因为子类的构造函数代码块中,第一行会有默认的super();这就是调用父类无参构造函数,
构造函数第一行一般会是this或者super
你用eclipse自动生成子类的构造函数试下,(这总会吧)
一般我们不会写出来,但是它存在
作者: Amu    时间: 2015-6-1 22:43
这是因为子类继承父类,子类要继承父类的非私有属性,需要调用父类的构造方法给父类的成员变量进行初始化
这其实在子类对象中有一块空间是存放父类的成员变量和非私有成员变量的
作者: jakemind    时间: 2015-6-1 22:53
为了给父类初始化,,,,
作者: 18530919536    时间: 2015-6-1 23:25
子类的初始化需要调用父类的初始化方法吧
作者: 途中ms前进    时间: 2015-6-2 11:30
应为子类会构造函数每一行都有个默认的super()
作者: 武汉小菜鸟    时间: 2015-6-2 11:36
因为子类继承父类的东东,需要对父类的东东进行初始化,构造函数一般就是用来初始化的
作者: 李志鹏    时间: 2015-6-2 11:51
在创建对象时子类的构造函数中会默认调用父类的构造函数从
作者: 胡亚辉    时间: 2015-6-2 12:10
子类构造方法默认有一个super();之所以会调用父类的构造是因为在子类实例化前 父类的属性必须先初始化 子类的后初始化 (先有父亲 后有儿子)
作者: 夜愿Relax    时间: 2015-6-2 12:24
大家都说的很全了
作者: F灬灬    时间: 2015-6-2 13:13
肯定会用到super();
super是在子类对象方法中对父类对象的引用。
在你New一个新的类时会调用该类的构造器,然而该类继承了B类,则会调用B类的构造器,若B类只有一个有参构造器,则会调用B类的有参构造器,若B类中含有两个构造器,一个有参一个无参,这样两个都可以调用。
作者: shao122791159    时间: 2015-6-2 21:29
类A的构造函数的第一行会有一句默认语句super();    调用父类构造函数
作者: 少年闰土    时间: 2015-6-2 21:43
这是语法规定,构造子类之前必须先构造其父类;如果父类使用默认构造函数则子类构造函数调用父类的默认构造函数,否则,在子类构造函数中必须显式调用父类的构造函数。




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