需要!
如果没有super(strValue);出错!因为Key已经明确定义了构造方法public Key(String strValue)!

解决方案 »

  1.   

    这是在引用它的超类的构建器,并不一定是必须加上的!
    我想应该没有人去这样写吧,在子类定义了构造函数而只调用了super(strValue)这条语句
    public Key1(String strValue)
    {
    super(strValue);
    }
    调用super()是引用了父类的功能,然后在子类中添加功能,比如:
    public Key1(String strValue)
    {
    super(strValue);
                      //子类功能
                      .....  
    }
      

  2.   

    这个问题这么看,如果你Key里面只有一个构造函数
    public Key(String s){}的话,那继承他的类的确都要实现这个构造函数,如果你怕麻烦不想每个子类都实现这个构造函数,你可以在Key.java里构造一个空构造函数,就是
    public Key(){}
    这样,继承他的子类甚至可以写成
    public Key1 extends Key{}
    也不会错,你想想就知道为什么了
      

  3.   

    可是问题是如果不在子类中定义构造函数的话,会出编译期错误,还有“如果父类显式定义了构造函数,那么在子类中就要显式地调用父类的构造函数”那么我的想法是一直往前追溯,第一个类应该是要定义构造函数的吧,那岂不是以后每个子类都要显式地定义构造函数?
    ===========================================================================
    这里更正确的说是定义了含有参数的构造方法。如果只有含参数的构造方法,那么子类肯定需要定义构造方法,其中通过super(x)来对父类对象初始化;如果定义的构造方法是没有参数的,那么子类不一定需要构造方法;如果两者都有,子类也不一定需要构造方法,具体看你程序的需要而定
      

  4.   

    如果两者都有,子类也不一定需要构造方法,如果你定义了子类构造方法,那么
    super()调用的是父类的无参构造方法
    super(x)调用的是父类的带有参数的构造方法
      

  5.   

    Key1 必须有super(strValue); 不然程序 就会报错.
    因为 你要是没有不写super(strValue);  jvm 就会自己加上一个空参的super();然后它去父类里
    寻找空参默认够造器 没有就报错  有就执行