黑马程序员技术交流社区

标题: 使用new关键字创建对象时为什么有时提示找不到无参的构... [打印本页]

作者: 乔叶旭    时间: 2012-11-27 23:54
标题: 使用new关键字创建对象时为什么有时提示找不到无参的构...
本帖最后由 乔叶旭 于 2012-11-28 10:13 编辑

请问在使用new关键字创建对象时,为什么有时候提示找不到无参的构造方法啊?比较郁闷
作者: 坚持远方    时间: 2012-11-28 00:03
如果你所创建对象的那个类没有无参构造函数的话,那么你是不能用无参的创建对象的
作者: 坚持远方    时间: 2012-11-28 00:06
如果那个类是你自己定义的,你在类中写了有参的构造函数,那么就只有这个有参构造了,这时候编译器不会给你自动生成一个默认的无参构造。所以你new对象时必须用有参的
作者: 刘腾    时间: 2012-11-28 00:19
构造函数在new创建对象时调用。
也就是说,当new对象的时候会调用与之对应的构造函数,new一个有参的就调用有参数的构造函数,new一个无参的就调用无参数的构造函数。
之所以会出现题中的情况,是因为你new的是无参的对象,而类中却没有对应的无参构造函数,所以提示找不到。

每一个类都有构造函数,即使我们没有显式定义构造函数,也会生成一个默认无参的构造函数,其中没有任何内容。

注意:这个自动生成的构造函数只在未定义任何构造函数时生成,如果我们定义了一个有参的构造函数,那么就不会生成无参的了


作者: 张远游    时间: 2012-11-28 00:22
1、假如没有定义构造方法会自动生成一个无参构造,无参的默认不写,但是如果你写了其他的
public Person(String name),如果你想直接new Person(),就必须要写,你可以理解为public Person(String name)‘覆盖‘掉了无参。
2、如果你继承了一个类,构造方法就必须先引用父类的构造方法,而你的父类没有写出无参数构造方法,所以编译器找不到无参方法,就报了错.你必须在你的子类构造方法最上面加一句super(//放一个int值),才可以通过编译.

希望可以帮到你






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