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)
是的,你需要从B的构造函数中调用超级构造函数.如果你没有指定this(...)或super(...)在构造函数的开头指定,super()将为你插入一个隐式调用- 调用超类的无参数构造函数.在这种情况下,你不要有一个参数的构造函数A-所以你需要明确指定你想打电话,与参数一起构造.
有可能你不想要s在B中调用另一个变量,尽管......
我怀疑你想要这个:
class B extends A {
B(String s) {
super(s);
}
}
Run Code Online (Sandbox Code Playgroud)
要明白,如果你会发生什么,这一点很重要却也声明一个变量叫s在B.然后,你必须两个自变量为每个实例B-在一个声明中A和一个阴影在里面B.他们可以很容易地采取不同的价值......这将是非常混乱.
请注意,另外,将字段设为私有几乎总是一个好主意 - 此时您并不真正知道超类声明哪些变量,因为您无法访问它们.如果碰巧隐藏变量,至少不会导致明显的歧义(当然,这是由规范处理的).但是,一个变量与其超类中的变量具有相同的名称通常仍然是错误的 - 它表明您对相同的信息有两个不同的真实来源.
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |