java - 对象在向上转型然后向下转型之后是否会丢失其属性值?

标签 java downcast upcasting

我已将以下代码中的 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/

相关文章:

kotlin - 是否可以更改 Kotlin 的属性 getter 类型?

java - 为什么会抛出向上转换检查异常

java - 使用 JPA 存储/读取日期时出现时区相关问题

c# - 在不失表现力的情况下从 Generic 中脱颖而出

java - 这个沮丧的:(B)super.克隆()如何工作?

java - 您可以在不声明新变量的情况下在 Java 中向下转换对象吗?

C++ 从多重继承向上转型;源不是多态的

java - 阶段 13.0 (TID 13) 中的任务 0.0 异常 java.lang.OutOfMemoryError : Java heap space

Java:将遗留类型 Dictionary 的实例转换为 Map

java - 如何使用 JSP 播放 YUV 图像序列