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)
Boh*_*ian 10
不,你不能.
你提出的是场阴影 - 你不能覆盖一个场.
该场name在子类中并没有任何关系做同场name的超类,除了这股"名"的名称相同,从而区分超类的领域,我们必须把它称为super.name在子类.
这样做通常被认为是一个"错误"(或者可能是一个潜在的错误),最佳实践不是影子字段,因为在不知情的情况下很容易引用错误的字段.