超类型中的静态最终结果

时间:2014-07-01 15:56:54

标签: java static final super supertype

为什么即使你声明了一个私有的静态最终变量,一个颜色 - 默认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

3 个答案:

答案 0 :(得分:7)

静态变量不属于对象的任何实例。 this关键字应该引用一个对象的实例和其中使用的变量。虽然您可以使用this关键字来访问静态变量,但您不应该这样做。

此外,在子类中无法访问超类中标记为private的变量。

要使用this关键字从子类引用超类中声明的变量,必须将该变量声明为protectedpublic

答案 1 :(得分:0)

您可以尝试将静态最终变量绑定到将其传递给super时所在的类。我相信你可以通过做super(SubClass.PRIVATE_STATIC_FINAL_VARIABLE);

这样的事情来做到这一点

答案 2 :(得分:-1)

我们有两件事要知道,

  1. static关键字的含义是什么。
  2. this keyword
  3. 的含义是什么?
  4. 什么是constructor
  5. 在java中,有两种类型,classinstance of an class。我们可以使用类而不创建它的实例,或者在创建类本身的实例之后。

    objectclass的实例。

    关键字static与该类一起使用。 this与类的实例一起使用。 this关键字指的是其中使用的instance of the class

    在调用班级instance of an class后创建objectconstructor)。只有在创建了类的实例(在对象内)之后,我们才能使用关键字this

    由于在创建类的实例之前调用了构造函数方法,因此我们不能在构造函数中使用this关键字。这就是为什么你在super(this.defaultC)但在super(defaultC)

    中出错的原因

    您也不能在this的构造函数中使用PRIVATE_STATIC_FINAL_VARIABLE关键字。

    但您可以在不使用PRIVATE_STATIC_FINAL_VARIABLE的情况下使用this i.e. super(PRIVATE_STATIC_FINAL_VARIABLE)