class b{
b(int a){
System.out.println("生命只有一次!");
}}
class a extends b{
a(int n){
System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!");
}
}
public class gouzao {
public static void main(String args[]){a ak=new a(1);
}}
//父类b中得构造方法与子类a的构造方法一样(父类与子类都含有参数),子类的构造方法就会出错,
//父类b中得构造方法与子类a的构造方法一样(父类与子类都不含有参数),子类的构造方法不会出错。这是为什么?
b(int a){
System.out.println("生命只有一次!");
}}
class a extends b{
a(int n){
System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!");
}
}
public class gouzao {
public static void main(String args[]){a ak=new a(1);
}}
//父类b中得构造方法与子类a的构造方法一样(父类与子类都含有参数),子类的构造方法就会出错,
//父类b中得构造方法与子类a的构造方法一样(父类与子类都不含有参数),子类的构造方法不会出错。这是为什么?
class a extends b{
a(int n){
System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!");
}
}当子类构造方法没有显式调用父类构造方法的时候,会隐含调用父类的无参数构造方法,就相当于在最前面调用了super()。但是,由于父类定义了有参数的构造方法,而没有定义无参数的构造方法,所以子类无法调用父类的无参数构造方法,所以出错!
a(int n){
super(); //隐含调用,相当于这一句话
System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!");
}
}
首先概念性问题:一个类中一旦定义了有参构造,那么系统就不再声明定义无参构造
原因:一个类中我们可以不定义构造,因为系统已经帮我们定义好了一个默认的无参构造,a ab=new a();//这里就会调用无参构造 楼主两个类都没有定义无参构造:这句代码:a ak=new a(1);
1:首先会调用a类的带参构造,然而a类继承父类b类,子类要继承父类的成员首先需要初始化父类,在a类构造中并无调用父类构造,那么系统会隐示调用父类无参构造进行初始化,就在这个时候发现没有父类无参构造,因此引发错误 至于第二个问题:就很好理解了,都是无参构造,不管是显示定义还是系统定义,都不会引发错误