Java构造函数错误

0 java constructor compiler-errors

我收到一个构造函数错误.为了使这段代码有效,我是否需要在B类中使用super?

 class A {  
      protected String s ;
      A (String s) {
           this.s = s  ; 
         }
  }

 class B extends A {
     String s ;
     B(String s) {
        this.s  = s ;    
         }
   }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

是的,你需要从B的构造函数中调用超级构造函数.如果你没有指定this(...)super(...)在构造函数的开头指定,super()将为你插入一个隐式调用- 调用超类的无参数构造函数.在这种情况下,你不要一个参数的构造函数A-所以你需要明确指定你想打电话,与参数一起构造.

有可能你想要s在B中调用另一个变量,尽管......

我怀疑你想要这个:

class B extends A {
    B(String s) {
        super(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

要明白,如果你会发生什么,这一点很重要也声明一个变量叫sB.然后,你必须两个自变量为每个实例B-在一个声明中A和一个阴影在里面B.他们可以很容易地采取不同的价值......这将是非常混乱.

请注意,另外,将字段设为私有几乎总是一个好主意 - 此时您并不真正知道超类声明哪些变量,因为您无法访问它们.如果碰巧隐藏变量,至少不会导致明显的歧义(当然,这是由规范处理的).但是,一个变量与其超类中的变量具有相同的名称通常仍然错误的 - 它表明您对相同的信息有两个不同的真实来源.