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的构造方法一样(父类与子类都不含有参数),子类的构造方法不会出错。这是为什么? 

解决方案 »

  1.   


    class a extends b{
      a(int n){
        System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!"); 
      }
    }当子类构造方法没有显式调用父类构造方法的时候,会隐含调用父类的无参数构造方法,就相当于在最前面调用了super()。但是,由于父类定义了有参数的构造方法,而没有定义无参数的构造方法,所以子类无法调用父类的无参数构造方法,所以出错!
      

  2.   

    Java codeclass a extends b{
      a(int n){
        super();  //隐含调用,相当于这一句话
        System.out.println("哈哈"+n+"好你又来了!哈哈,成为你的队友,荣幸之极!"); 
      }
    }
      

  3.   

    简单:我就说重点了
     首先概念性问题:一个类中一旦定义了有参构造,那么系统就不再声明定义无参构造
    原因:一个类中我们可以不定义构造,因为系统已经帮我们定义好了一个默认的无参构造,a ab=new a();//这里就会调用无参构造  楼主两个类都没有定义无参构造:这句代码:a ak=new a(1);
      1:首先会调用a类的带参构造,然而a类继承父类b类,子类要继承父类的成员首先需要初始化父类,在a类构造中并无调用父类构造,那么系统会隐示调用父类无参构造进行初始化,就在这个时候发现没有父类无参构造,因此引发错误   至于第二个问题:就很好理解了,都是无参构造,不管是显示定义还是系统定义,都不会引发错误