最近碰到一个问题
构造函数前面可以加void修饰吗?看到很多文章讲都说不可以,但我在eclipse里就可以啊!
代码如下:
public class Father {
public String name;
public Father(String name){
this.name = name;
}
} class Daughter extends Father{
} 此时编译报错,会提示“Implicit super constructor Father() is undefined for default constructor. Must define an explicit constructor”
但如果将代码改为:
public class Father {
public String name;
public void Father(String name){
this.name = name;
}
} class Daughter extends Father{
}
很简单就是在构造函数前面加了个void, 就可以通过编译,可以运行了!
请大家帮忙分析一下!
构造函数前面可以加void修饰吗?看到很多文章讲都说不可以,但我在eclipse里就可以啊!
代码如下:
public class Father {
public String name;
public Father(String name){
this.name = name;
}
} class Daughter extends Father{
} 此时编译报错,会提示“Implicit super constructor Father() is undefined for default constructor. Must define an explicit constructor”
但如果将代码改为:
public class Father {
public String name;
public void Father(String name){
this.name = name;
}
} class Daughter extends Father{
}
很简单就是在构造函数前面加了个void, 就可以通过编译,可以运行了!
请大家帮忙分析一下!
楼主【yingrihong】截止到2008-06-23 17:03:14的历史汇总数据(不包括此帖):
发帖数:1 发帖分:20
结贴数:1 结贴分:20
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
public class Father {
public String name;public Father(String name){
this.name = name;
}
public Father(){};
} class Daughter extends Father{
}
public String name;public Father(String name){
this.name = name;
}
public Father(){};
} class Daughter extends Father{
public Daughter (){};
public Daughter (String name){};
}
this.name = name;
} 但是你这个就不是构造函数了是不是构造函数 并不是单单由方法名决定的 还要有更重要的是要没有返回类型
this.name = name;
}
已经不是构造函数了所以继承不会出错了
此时编译报错,会提示“Implicit super constructor Father() is undefined for default constructor. Must define an explicit constructor”因为
public Father(String name){
this.name = name;
}
是一个合法的构造函数,但是因为Daughter extends Father,缺省有一个无参的构造函数(你可以 new Daughter()),但是这个无参的构造函数同时也就要求父类有一个无参的构造函数。
注意一个问题:此时Father类中已经有了一个带String 参数的构造函数,那么就只有这一个构造函数了!!所以报的错误是 constructor Father() is undefined 构造函数未定义(没有参数的)
你调整代码之后,在Father(String )前面加了一个返回类型void,其实你还可以加其他类型,在函数内部返回相应的值,已经不是一个构造函数了。你可以写出这样的代码
new Father().Father("adkjahsd");但是下面的就是非法的:
new Father("adkjahsd");
说清楚没有????
不过我了解到一点:构造函数和普通方法之间可以重载,哈哈
{
public String name; public Father(String name)
{
this.name = name;
}
}
class Daughter extends Father
{
public Daughter(String name)
{
super(name);
}
}
this.name = name;
}
}
lz的这个方法已经不是构造方法了,它变成了 一个普通的成员方法。也就是说LZ并没有编写构造方法代码。
如果一个类没定义构造函数 他会有一个默认的无参构造函数
但是如果定义了有参数的构造函数,他就不会有默认的无参构造函数你的错误中 子类有默认的无参构造函数
初始化子类实例会调用父类无参构造函数
而此时父类没有 就报错了2. 当你加了void Father()就不是构造函数而是普通函数
它就会有默认的构造函数 所以子类不会报错
第二,函数名称的声明,他并没有说不能跟类名相同。o(∩_∩)o...