黑马程序员技术交流社区
标题:
怎么学着学着晕乎了~~~求解答关于重载构造函数问题
[打印本页]
作者:
李晓旭
时间:
2012-3-16 23:55
标题:
怎么学着学着晕乎了~~~求解答关于重载构造函数问题
/*如果用这个空白的就可以编译通过,为什么
class Person {
}
*/
class Person //extends Object 加了继承也不行
{
//public void Person(){} //加了Person()构造函数还是不行
public void Person(int a)
{
System.out.println("!!!");
}
}
class Demo
{
public static void main(String[] args)
{
Person p = new Person(5);
sop(p);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
demo.java:17: 错误: 无法将类 Person中的构造器 Person应用到给定类型;
Person p = new Person(5);
^
需要: 没有参数
找到: int
原因: 实际参数列表和形式参数列表长度不同
为什么我重载了构造函数,但是不能创建对象了呢?
个人认为关于构造函数我应该已经理解了,但是竟然想不通。。。。这是为什么:'(
作者:
李创
时间:
2012-3-17 00:05
class Person //extends Object 加了继承也不行
{
//public void Person(){} //加了Person()构造函数还是不行
// public void Person(int a)
public Person(int a)//构造函数不用加类型
{
System.out.println("!!!");
}
}
作者:
黑马肖凯骏
时间:
2012-3-17 00:07
你去掉void 就正常了。
默认的构造方法是没有返回类型void修饰的 你加了void和原本没有的Person(){} 这样做是冲突的,当然就报错误了!
作者:
李飞
时间:
2012-3-17 00:15
构造函数没有返回值,也不能用void修饰,只能用public private等修饰
你这其实就不是构造函数,把构造函数的void去掉就是的了
作者:
李晓旭
时间:
2012-3-17 00:28
{:soso_e153:}崩溃了,哈哈,完全把这个给忽略掉......
作者:
阿牛
时间:
2012-3-17 23:21
学习了。
作者:
魏群
时间:
2012-3-17 23:35
构造函数的语法错误。无需加void修饰符,加了就变成普通方法了。
作者:
朱亚安
时间:
2012-3-18 01:50
首先你这个问题就是构造方法的书写的问题,构造方法不能有返回值的,所有void去掉就OK了。
如你代码,机上void后这个方法就不是构造方法了,只是一个普通的方法,那么该类中就只有一个空构造了。在main中new对象的时候其实是调用的空构造方法,因此运行的时候会说你的参数个数不对,空构造中就没有构造方法而你传了一个5这样的话是肯定错的。要避免呀~~~
作者:
薛波
时间:
2012-3-18 09:20
public class Person {
public Person(int i) {
}
public void Person(int a)//这种写法叫定义方法而不叫重载构造方法,构造方法是没有返回值的所以重载构造方法以。
{
System.out.println("!!!");
}
}
class Demo
{
public static void main(String[] args)
{
Person p = new Person(5);
sop(p);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
构造方法是一种特殊的方法,它的名字必须与它所在类的名字完全相同,并且没有返回值,也不需要使用关键字void进行标识。构造方法用于对对象中的所有成员变量进行初始化,在创建对象时立即被调用。需要注意的是:如果用户没有定义构造方法,Java会自动提供一个默认的构造方法,用来实现成员变量的初始化。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2