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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 253663946 中级黑马   /  2016-4-9 22:35  /  7007 人查看  /  28 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
在本类自己定义了一个有参数构造函数,为什么还要定义一个空参数的构造函数呢?空参数的构造函数基本用不到,为什么还要多此一举啊?求大哥大家们解答,谢谢了哈!

28 个回复

正序浏览
简单粗暴的说:
不用有参的时候,空参可以不写,系统默认有空参;
用有参的时候,必须自己给出空参.
这是java的语法规则,人为规定的!
回复 使用道具 举报
构造函数就是为了给对象初始化的啊,简化代码,既然有了有参数的,自己NEW对象的时候自然不会NEW空参的吧!
回复 使用道具 举报
简单理解就是空参是用来初始化的,而有参构造是用来传参的
回复 使用道具 举报
丶半度微凉 发表于 2016-4-10 22:46
当你创建对象时,new 对象();括号里可以写参数,也可以不写,如果有参数,那么他会调用子类的有参构造方 ...

恩恩.谢谢啦
回复 使用道具 举报
丶半度微凉 发表于 2016-4-10 22:49
我们打代码规定就是子父类都定义有参和无参构造,这样调用不会出错,无论你怎么传递参数都可以 ...

这是一个好习惯
回复 使用道具 举报
lqqwqq 发表于 2016-4-9 23:34
当你创建了一个有参的构造函数后,系统不再默认提供空参构造函数,因此当你用空参构造函数创建对象时就会报错 ...

嗯呢,明白了
回复 使用道具 举报
1165046886 发表于 2016-4-9 23:26
在学习阶段,一些练习的例子如果直接调用有参,的确是用不到空参的.但是,我们现在的学习是要为将来的开发打好 ...

哥们说的好,工作的时候写的代码不单单是自己的,而是整个团队的,有些功能确实要顾及到大家.哈哈.谢谢了
回复 使用道具 举报
yangxiong 发表于 2016-4-9 23:10
有参数的可以给类里面的对象进行初始化。当你只是想用类的对象,而不需要对里面的数据进行初始话的时候就需 ...

有了有参数的构造函数创建对象的时候肯定使用有参数的构造函数了,设置有参数的构造函数就是为了方便对象初始化,简化书写的嘞
回复 使用道具 举报
worley 发表于 2016-4-9 23:01
构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性 ...

好复杂啊,我得好好理一理
回复 使用道具 举报
251855915 发表于 2016-4-9 22:52
拿学生类举个例子,属性有name和age.

这是调用的有参构造,

构造函数就是为了给对象初始化的啊,简化代码,既然有了有参数的,自己NEW对象的时候自然不会NEW空参的吧!
回复 使用道具 举报
一般没有参构造是默认有空参构造的,有了有参构造之后会自动取消掉空参构造,但如果这时候要使用空参构造就很尴尬了,忘记了就会报错,所以一般都会自己加上一个空参构造
回复 使用道具 举报
一般没有参构造是默认有空参构造的,有了有参构造之后会自动取消掉空参构造,但如果这时候要使用空参构造就很尴尬了,忘记了就会报错,所以一般都会自己加上一个空参构造
回复 使用道具 举报
如果我们没有给出构造方法,系统将自动提供一个空参构造方法。
如果我们给出了构造方法,系统将不再提供默认的空参构造方法。
注意:这个时候,如果我们还想使用空参构造方法,就必须自己给出。建议永远自己给出无参构造方法
也就是有时候自己开始不知道要不要用空参构造,但是如果要用到的时候没有给空参构造就会报错
回复 使用道具 举报
a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法
也就是有时候自己开始不知道要不要用空参构造,但是如果要用到的时候没有给空参构造就会报错
回复 使用道具 举报
我们打代码规定就是子父类都定义有参和无参构造,这样调用不会出错,无论你怎么传递参数都可以
回复 使用道具 举报
当你创建对象时,new 对象();括号里可以写参数,也可以不写,如果有参数,那么他会调用子类的有参构造方法,即把参数传递给子类有参构造,而系统默认的是当你想给子类初始化数据的时候,必须先给父类初始化数据,所以子类会调用父类的构造函数。    当你对象()里无参数,这时调用的是无参构造,子类父类有没有无参构造一样,即使你不写,系统会默认添加一个无参构造(super());当你对象()有参数时,传递给子类要看你super() 的形式了,可以super(参数)或者super();this.变量 = 变量,如果是super(参数),子类就会调用父类的有参构造,这时你父类没有无参构造也无影响,如果是第二种形式,那么他调用的会是父类的无参构造,父类就必须有无参构造,这时有参构造有没有无影响(当你定义了构造方法时,系统就不会再提供默认的无参构造),构造方法说白了,调用就是对应的,传递参数就调用子类有参构造,子类的super()形式决定你调用父类无参还是有参,也是对应的
回复 使用道具 举报
可以不定义空参的 不定义就不能使用空参
回复 使用道具 举报
子类构造方法默认访问父类空仓构造的,冯大神建议永远自己给出空参构造
回复 使用道具 举报
这个老师讲课的时候说好像是以后写代码的时候要是不写空参数的构造函数好像得报错!
回复 使用道具 举报
AAAheilong 来自手机 中级黑马 2016-4-10 08:25:38
8#
253663946 发表于 2016-4-9 22:35
在本类自己定义了一个有参数构造函数,为什么还要定义一个空参数的构造函数呢?空参数的构造函数基本用不到, ...

简单的理解:1程序员间的规定,可能有人会用到无参构造2给对象进行初始化,开辟内存空间
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马