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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么子类对象初始化都要访问父类的构造函数呢?
==============================
因为子类继承父类的内容,所以创建对象时必须要先看父类是如何对内容进行初始化的,这就是子类的实例化过程。。。这句话怎么理解呢?  求指点~~~~

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

8 个回复

倒序浏览
因为子类继承了父类的成员,所以得调用父类的构造函数对其进行初始化
回复 使用道具 举报
在对子类对象进行初始化时,父类的构造函数也会运行, 为什么?
那是因为子类的构造函数默认第一行有一条隐式的语句 super(); ,super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
  
为什么子类创建时一定要访问父类中的构造函数?
  
因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化,所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
  
注意:super语句一定定义在子类构造函数的第一行

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
举一个简单的例子,父类中某个方法用到了父类的一个成员变量,而此成员变量是通过父类构造函数传进来的(也就是说构造父类函数时需要一个参数);
而子类继承了父类,也得到了这个需要访问成员变量的方法,如果子类在创建对象时,不访问父类的那个带参数的构造方法,我想是会出错的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
假如你母亲是JVM,你要出生是不是需要由你母亲先去访问你父亲呢?好吧,这个例子有点邪恶,但我人很正直,别喷我.
回复 使用道具 举报
我的理解是,老爸生了儿子,儿子拥有老爸的一切。不管儿子愿不愿意。老爸说给你不要也得要(你是我儿子得听我的)。儿子直接拿了老爸的东西,当然要看老爸是是怎么创造出这一切的,因为这不是自已创造出来的嘛!当然老爸最后来也说了。我给你这一切,是为了让你不做败家子。要在老爸的基础上,在搞些发明创造。这也是老爸把你生下来的目的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
继承么不是,字面理解啊,我的东西给你了,你不要也得要。构造函数定义父类是个人,父类的孩子也就是个人啊,总不能生一个小猫吧。
比老师说的为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取.所以子类对象建立时,需要先查看父类是如何对这些数据进行初始化的.
子类在对象初始化时,要先访问以下父类中的构造函数.
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定



回复 使用道具 举报
在对子类对象进行初始化时,父类的构造函数也会运行, 为什么?
那是因为子类的构造函数默认第一行有一条隐式的语句 super(); ,super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
  
为什么子类创建时一定要访问父类中的构造函数?////子类继承父类,就得到了父类的所有非抽象方法,子类想用父类的方法时,就得从父类的构造函数入手!
  
子类继承了父类,父类中的数据子类可以直接访问。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化,所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
super();  
注意:super语句一定定义在子类构造函数的第一行,因为如果不在第一行,后面的数据也许会覆盖前面的数据!

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
我的理解是:子类与父类的关系表面上是通过extends来体现的,其最实质的内容是 通过子类构造函数的首行进行关系的传递(成员的传递)、
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马