黑马程序员技术交流社区

标题: 为什么子类对象初始化都要访问父类的构造函数呢? [打印本页]

作者: 黑马李文    时间: 2013-8-8 21:45
标题: 为什么子类对象初始化都要访问父类的构造函数呢?
为什么子类对象初始化都要访问父类的构造函数呢?
==============================
因为子类继承父类的内容,所以创建对象时必须要先看父类是如何对内容进行初始化的,这就是子类的实例化过程。。。这句话怎么理解呢?  求指点~~~~
作者: 单凯    时间: 2013-8-8 21:50
因为子类继承了父类的成员,所以得调用父类的构造函数对其进行初始化
作者: 黑马李昂    时间: 2013-8-8 21:54
在对子类对象进行初始化时,父类的构造函数也会运行, 为什么?
那是因为子类的构造函数默认第一行有一条隐式的语句 super(); ,super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
  
为什么子类创建时一定要访问父类中的构造函数?
  
因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化,所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
  
注意:super语句一定定义在子类构造函数的第一行

作者: xkfxm    时间: 2013-8-8 22:59
举一个简单的例子,父类中某个方法用到了父类的一个成员变量,而此成员变量是通过父类构造函数传进来的(也就是说构造父类函数时需要一个参数);
而子类继承了父类,也得到了这个需要访问成员变量的方法,如果子类在创建对象时,不访问父类的那个带参数的构造方法,我想是会出错的。
作者: 肥猫    时间: 2013-8-8 23:15
假如你母亲是JVM,你要出生是不是需要由你母亲先去访问你父亲呢?好吧,这个例子有点邪恶,但我人很正直,别喷我.
作者: 影响力147753321    时间: 2013-8-8 23:36
我的理解是,老爸生了儿子,儿子拥有老爸的一切。不管儿子愿不愿意。老爸说给你不要也得要(你是我儿子得听我的)。儿子直接拿了老爸的东西,当然要看老爸是是怎么创造出这一切的,因为这不是自已创造出来的嘛!当然老爸最后来也说了。我给你这一切,是为了让你不做败家子。要在老爸的基础上,在搞些发明创造。这也是老爸把你生下来的目的。
作者: 付龙    时间: 2013-8-9 11:14
继承么不是,字面理解啊,我的东西给你了,你不要也得要。构造函数定义父类是个人,父类的孩子也就是个人啊,总不能生一个小猫吧。
比老师说的为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取.所以子类对象建立时,需要先查看父类是如何对这些数据进行初始化的.
子类在对象初始化时,要先访问以下父类中的构造函数.
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定




作者: 心灵之歌    时间: 2013-8-9 12:07
在对子类对象进行初始化时,父类的构造函数也会运行, 为什么?
那是因为子类的构造函数默认第一行有一条隐式的语句 super(); ,super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
  
为什么子类创建时一定要访问父类中的构造函数?////子类继承父类,就得到了父类的所有非抽象方法,子类想用父类的方法时,就得从父类的构造函数入手!
  
子类继承了父类,父类中的数据子类可以直接访问。所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化,所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
super();  
注意:super语句一定定义在子类构造函数的第一行,因为如果不在第一行,后面的数据也许会覆盖前面的数据!
作者: jingzhouheima    时间: 2013-8-9 19:31
我的理解是:子类与父类的关系表面上是通过extends来体现的,其最实质的内容是 通过子类构造函数的首行进行关系的传递(成员的传递)、




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