我的应用程序类使用一个默认包含两个变量的库。
// A class from framework:
public class SuperClass implements Serializable {
private long id;
private long version;
// getter and setter methods for these variables...
}
我应该扩展这个类,以便访问框架的一些功能。
如果我将这个课程扩展到我自己的课程:
public class MyClassChild extends SuperClass {
private long myprimarykey;
private String some column;
private long myversion;
// getter and setter methods for these variables...
}
根据编程模型,这两个变量也是可访问的。
在实现需要类型为SuperClass
的对象的操作时。
有没有想法扩展那个不包括这两个变量(id, version)
的SuperClass?
我不知道该怎么办?
有任何建议吗?
由于
答案 0 :(得分:3)
您无法删除这些字段,但您可以覆盖getter和setter以执行默认值以外的操作(这取决于其访问修饰符,但它们可能为protected
或更高)。例如,通过这种方式,您可以停止外部分配这些变量。如果您选择此路线,我建议您熟悉这些字段在超类中使用的方式,以便您可以预测任何连锁行为。
答案 1 :(得分:1)
不。如果你继承,你就会得到整个班级。如果您不想继承所有字段,那么您就不是在设计子类。
想象一下如果你可以省略变量会发生什么 - 继承方法对现在缺失的状态会做什么?一切都会破裂......
答案 2 :(得分:1)
你所能做的就是让那个变量对超类是私有的,所以子类不会“看到”它。
答案 3 :(得分:1)
通常,JPA不允许您覆盖超类映射以删除属性,但根据您的提供程序,可能会执行以下操作:
public class MyClassChild extends SuperClass {
private long myprimarykey;
private String some column;
private long myversion;
// Override superclass mappings
@Transient
long getId() { return super.getId(); }
@Transient
void setId(long id) { return super.setId(long id); }
// etc...
}
修改强>
此外,还可以使用@AttributeOverride
注释覆盖映射超类中各列的值,例如
@AttributeOverride(name="id", column=@Column(name="EMP_ID"))
@Entity
public class MyClassChild extends SuperClass {
private String some column;
...
}
答案 4 :(得分:0)
当你扩展一个类时,你应该添加更多变量和方法,你不能减去。