class sub {
 public int i = 0;   public sub (String text){ 
 i = 1 ;
 }
 } 
    
 public class test4 extends sub { 
public test4 (String text){
 i= 2; 
 } 

 public static void main (String []args){
 test4 ts = new test4 ("Hello"); 
 System.out.println(ts.i); 
 }
 }
说是在test4构照函数的地方编译错误,是什么原因啊!

解决方案 »

  1.   

    这个东西确实隐藏得比较好啊
    因为调用子类构造方法之前会先调用直接父类构造方法
    默认是调用那个无参的构造方法
    但是sub中又没有了无参的构造函数,在test4的构造方法中又写上super(text);
    所以报错
      

  2.   

    super(text); 
    子类构造方法的第一句一定是要调用父类的构造方法,
    平时都是无参构造,super();可以省略
    而父类有参的构造,子类在构造时一定要调用
      

  3.   

    一楼的大哥,哪有显示的调用 supper啊
      

  4.   

    父类有参构造函数的继承要加super()的