为什么即使你声明了一个私有的静态最终变量,一个颜色 - 默认C,让我们说 - 然后你仍然不能在超级构造函数中使用this.defaultC
(即你只能使用{{1}而不是super(defaultC)
),即使它只相当于super(this.defaultC
。
我只是试图将Tile类扩展为Wall类,而Wall类我存储了所有墙的所有必要defaultC
变量(例如它们的宽度和高度,另一个int和默认颜色) ,并且Tile类已经有一些变量(但它们是private static final
而不是protected
)。我不希望弹出警告private
(因为Tile.java和Wall.java对于许多变量都有相同的名称),所以我使用Field hides another field
作为我的私有静态最终变量,并且有很多错误。
这并不是特别令人不安(因为我只是有一些警告),但我只是想知道为什么。我猜测编译器根本不喜欢它,因为你不能在超类型之前引用this.
,但仍然完全相同。是否还没有添加这样的功能,忽略了这样的事情,还是有其他原因我看不到你不能使用this
?
答案 0 :(得分:7)
静态变量不属于对象的任何实例。 this
关键字应该引用一个对象的实例和其中使用的变量。虽然您可以使用this
关键字来访问静态变量,但您不应该这样做。
此外,在子类中无法访问超类中标记为private的变量。
要使用this
关键字从子类引用超类中声明的变量,必须将该变量声明为protected
或public
。
答案 1 :(得分:0)
您可以尝试将静态最终变量绑定到将其传递给super时所在的类。我相信你可以通过做super(SubClass.PRIVATE_STATIC_FINAL_VARIABLE);
答案 2 :(得分:-1)
我们有两件事要知道,
static
关键字的含义是什么。this
keyword constructor
在java中,有两种类型,class
和instance of an class
。我们可以使用类而不创建它的实例,或者在创建类本身的实例之后。
object
是class
的实例。
关键字static
与该类一起使用。 this
与类的实例一起使用。 this
关键字指的是其中使用的instance of the class
。
在调用班级instance of an class
后创建object
(constructor
)。只有在创建了类的实例(在对象内)之后,我们才能使用关键字this
。
由于在创建类的实例之前调用了构造函数方法,因此我们不能在构造函数中使用this
关键字。这就是为什么你在super(this.defaultC)
但在super(defaultC)
您也不能在this
的构造函数中使用PRIVATE_STATIC_FINAL_VARIABLE
关键字。
但您可以在不使用PRIVATE_STATIC_FINAL_VARIABLE
的情况下使用this
i.e. super(PRIVATE_STATIC_FINAL_VARIABLE)