【问题标题】:Is it fine to use "this" meaning "super" to use a field使用“this”表示“super”来使用字段是否可以?
【发布时间】:2020-03-26 19:41:37
【问题描述】:

我有一个类 A,它扩展了一个抽象类 B

让B有一个受保护的字段value

我想在A中使用这个字段。如果A没有,我可以写this.value从B那里得到它。

super.value有什么区别吗?

【问题讨论】:

  • 请显示代码以配合您的描述。

标签: java inheritance this super


【解决方案1】:

这取决于...

如果只有类B 声明了一个字段value,那么就没有关系了。但是如果A 类也声明了一个字段value,那么这很重要:

看看这个例子:

public class A extends B {

  private Object value = "A";

  public void printValue() {
    System.out.println(super.value);
    System.out.println(this.value);
  }

  public static void main(String[] args) {
    A a = new A();
    a.printValue();
  }

}

如果你运行这段代码,输出是:

B
A

JLS says

super.Identifier 形式指的是名为 Identifier 的字段 当前对象,但将当前对象视为 当前类的超类

因此,由于超类B 声明了一个字段value,它被super.value 引用。

关于关键字this JLS says

...关键字this 表示一个值,它是对 调用实例方法或默认方法的对象...this 的类型是类或接口类型T,其中关键字this 发生。

在您的情况下,this 的类型是 A。因此this.value 引用在类B 中声明的继承字段value。但是如果A 类会声明一个字段value,那么this.value 将引用A 类中的字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多