2013-06-26 81 views
4

如果我有一个类,如:我可以注释从超类继承的成员吗?

class Person { 
    private String name; 
    ...constructor, getters, setters, equals, hashcode, tostring... 
} 

我可以继承和应用注释名称字段在子类中,例如应用持久性的注释,而无需重新实现类的休息吗?

@Entity 
class Employee extends Person { 
    @Column(...) 
    private String name; 
} 
+0

您可以覆盖getter/setter并将'@ Column'放在那里。 – maba

回答

8

不,你不能。

你在提议的是字段shadowing - 你不能覆盖一个字段。

子类中的字段name与超类中的字段name没有任何关系,除了共享相同的名称“name”并因此区分超类中的字段之外,必须引用它在子类中为super.name

这样做通常被认为是一个“bug”(或者是一个潜在的bug),最好的做法是不要阴影字段,因为在不知道它的情况下很容易引用错误的字段。

8

这不会工作,因为在超类中的字段将不会受到影响,但你可以试试这个

@Entity 
class Employee extends Person { 
    @Column(name="xxx") 
    @Override 
    public void setName(String name) { 
    super.setName(name); 
    } 
    ... 
+1

也适用于覆盖('@ Override')getter方法,我会说更清楚。 – Raedwald

0

没有 - 你会得到两个不同的领域。 Employee中的注释名称字段将隐藏Person类中的名称字段。 Person.name不会被注释。