考虑一下我有一个像下面这样的课程。
public class SuperClass
{
private String a;
private String b;
//getter/setters
}
和一个子类
public class ChildClass extends SuperClass
{
private String c;
private String d;
//getter/setters
}
在另一个类中,我有一个ChildClass对象。该对象具有填充了数据的父类和子类成员变量。使用此对象,我需要获取父类的实例,即仅在父类中具有变量的对象(即a和b)。我该如何实现?
最佳答案
让我们退后一步,了解创建ChildClass
实例时会发生什么。将创建一个存储位置来存储ChildClass
和SuperClass
的字段。现在,您不能使该内存位置“忘记” ChildClass
字段,而仅保留SuperClass
字段。最好的办法是将ChildClass
字段设置为null
。
因此,要做您想做的事情,您将创建一个新对象。您可以使用以下方法来做到这一点:
public class ChildClass extends SuperClass {
private String c;
private String d;
public SuperClass getSuperClassInstance() {
SuperClass sc = new SuperClass();
sc.a = this.a; //or use getters/setters
sc.b = this.b; //you might need to deep clone objects
return sc;
}
}
正如@ruakh所说,仅强制转换为
SuperClass
是不够的,因为只要指向同一内存位置,就可以通过将数据强制转换回ChildClass
来检索数据。根据评论更新
所以这是一个XY problem!
您可以通过
@JsonIgnore
注释子类中的字段,也可以使用@JsonIgnoreProperties(value = { "c", "d" })
在类级别上对其进行注释。另外,this duplicate question中的答案也有帮助。
如果在其他情况下需要序列化这些字段,则可以使用JSON Views。
关于java - Java:从子类获取父类(super class)的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54701047/