日期:2014-05-20 浏览次数:20606 次
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的构造方法一样(父类与子类都不含有参数),子类的构造方法不会出错。这是为什么?
class a extends b{ a(int n){ System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!"); } }
------解决方案--------------------
上楼说的对啊:
在这我在补充一下
对于父类的构造方法当你不写时系统会自动给你加上但一旦你写了别的构造方法它就会消失
------解决方案--------------------
简单:我就说重点了
首先概念性问题:一个类中一旦定义了有参构造,那么系统就不再声明定义无参构造
原因:一个类中我们可以不定义构造,因为系统已经帮我们定义好了一个默认的无参构造,a ab=new a();//这里就会调用无参构造
楼主两个类都没有定义无参构造:这句代码:a ak=new a(1);
1:首先会调用a类的带参构造,然而a类继承父类b类,子类要继承父类的成员首先需要初始化父类,在a类构造中并无调用父类构造,那么系统会隐示调用父类无参构造进行初始化,就在这个时候发现没有父类无参构造,因此引发错误
至于第二个问题:就很好理解了,都是无参构造,不管是显示定义还是系统定义,都不会引发错误