我已将以下代码中的 Model2 实例向上转换为 Object 类,然后向下转换回 Model1 类的测试方法中的类 - Model2。但 thenUov 向下转换后其属性值显示为 null。实例在向上转型然后向下转型之后是否会失去其状态?您能否分享一些相同的细节。另外,有没有办法在向上转换后保留实例的状态?
public class Demo{
public static void main(String[] args) {
Model1 m1 = new Model1();
m1.setAttr1(10);
Model2 m2 = new Model2();
m2.setAttr2(10);
m1.test(m2);
}
}
class Model1 {
private Integer attr1;
public Integer getAttr1() {
return attr1;
}
public void setAttr1(Integer attr1) {
this.attr1 = attr1;
}
public void test(Object o) {
Model2 m = (Model2) o;
System.out.println(m.getAttr2());
}
}
class Model2 {
private Integer attr2;
public Integer getAttr2() {
return attr2;
}
public void setAttr2(Integer attr1) {
this.attr2 = attr2;
}
}
最佳答案
不,转换时不会丢失数据 - 对象就是对象。
由于 Model2 中的拼写错误,您得到 null
public void setAttr2(Integer attr1) {
this.attr2 = attr2;
}
您将 attr2 设置为自身,函数定义应为 (Interger attr2)
更改后将输出 10
关于java - 对象在向上转型然后向下转型之后是否会丢失其属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066408/