2013-06-26 102 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不會被註釋。

相關問題