class SuperClass {
    private int n;
  
    /*
    SuperClass() {
        System.out.println("SuperClass()");
    }
    */
    
  
    SuperClass(int n) {
        System.out.println("SuperClass(" + n + ")");
        this.n = n;
    }
}class SubClass extends SuperClass {
    private int n;
    
    SubClass(int n) {
     super();
        System.out.println("SubClass(" + n + ")");
        this.n = n;
    }
    
    SubClass() {
     super(300);
        System.out.println("SubClass()");
    }
}public class TestSuperSub {
    public static void main(String arg[]) {
        //SubClass sc1 = new SubClass();
        SubClass sc2 = new SubClass(400);
    }
}

解决方案 »

  1.   

    SubClass的父类没有显式地重写空的构造方法,同时还重新了int为参数的空的构造方法
    所以SubClass调用super()这个空构造方法会编译报错
    要么你显式重新空的构造方法,要么删掉其他的构造方法的重载,这样才能不会编译报错
      

  2.   

    这句出错了:super();
    因为你把不带参数的那个构造方法注释掉了,把注释去掉就行了
      

  3.   

    讲一下原理:
    1、如果你不写构造方法时,系统会给你一个默认的不带参数的构造方法;
    2、如果你写了构造方法时,系统就不会给你默认的构造方法了;你的程序已经自己写了构造方法了,所以系统就不会给你默认的构造方法了,所以super()这个方法是没有不存在的,你要调用的话,需要自己写,也就是注释掉的那段代码
      

  4.   

    class SuperClass {
        private int n;
      
        /*  
        SuperClass() {
            System.out.println("SuperClass()");
        }
        */  
        
        
        SuperClass(int n) {
            System.out.println("SuperClass(" + n + ")");
            this.n = n;
     
       }
       
    }class SubClass extends SuperClass {
        private int n;
        
        SubClass(int n) {
         //super();
            System.out.println("SubClass(" + n + ")");
            this.n = n;
        }
        
        SubClass() {
         super(300);
            System.out.println("SubClass()");
        }
    }public class TestSuperSub {
        public static void main(String arg[]) {
            SubClass sc1 = new SubClass();
            //SubClass sc2 = new SubClass(400);
        }
    }
    那这段代码为什么又会报错,我知道是 :SubClass(int n) {
         //super();
            System.out.println("SubClass(" + n + ")");
            this.n = n;
        }
    这段是这段代码的原因,可是这段代码不是没有使用到吗?这也会产生影响?
      

  5.   

    super();调用的父类的默认构造方法,楼主可以用super(X)调用SuperClass(int n) 方法就可以了