我可以注释从超类继承的成员吗?

bra*_*ter 8 java inheritance annotations

如果我有一个类如:

class Person {
  private String name;
  ...constructor, getters, setters, equals, hashcode, tostring...
}
Run Code Online (Sandbox Code Playgroud)

我可以将子类化并应用于子类中的name字段,例如应用持久性注释,而无需重新实现其余的类吗?

@Entity
class Employee extends Person {
    @Column(...)
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

Evg*_*eev 14

这不会起作用,因为超级类中的字段不会受到影响,但你可以试试这个

@Entity
class Employee extends Person {
  @Column(name="xxx")
  @Override
  public void setName(String name) {
     super.setName(name);
  }
  ...
Run Code Online (Sandbox Code Playgroud)

  • 对于被覆盖的(`@Override`)getter方法,也有用,而且我说更清楚了. (4认同)

Boh*_*ian 10

不,你不能.

你提出的是场阴影 - 你不能覆盖一个场.

该场name在子类中并没有任何关系做同场name的超类,除了这股"名"的名称相同,从而区分超类的领域,我们必须把它称为super.name在子类.

这样做通常被认为是一个"错误"(或者可能是一个潜在的错误),最佳实践不是影子字段,因为在不知情的情况下很容易引用错误的字段.