关于上溯造型的思考

因为之前学过double 类型强转int是会丢小数部分的,所以想知道java里向上造型会不会丢失派生类的额外数据。

将测试直接强转类型,和通过添加进list转换类型,会不会丢

person类作为父类

package demo;

public class Person  {
    private String name;
    {
        name="init";
    }
   public Person() {
       
   }
    public Person(String s) {
        this.name=s;
    }
    public String getName() {
        return name;
    }
}

student类作为子类,并多了status的额外变量

package demo;

public class Student extends Person{
    private String status;
    {
        status="lost";
    }
public Student(String s,String name) {
    super(name);
    this.status=s;
   
}
public Student() {
    this("lost","init");
}
public String getStatus() {
    return status;
}
@Override
public boolean equals(Object o) {
    return true;
}
}

然后测试

package demo;

import java.util.ArrayList;
import java.util.List;

public class Main1 {

    public static void main(final String [] args) {
        List<Person> list=new ArrayList<>();
        Person p1=new Person("p1");
        Student p1_2=(Student)p1;
     System.out.println("person->student"+p1_2.getStatus());
       
        Student p2=new Student("还在","p2");
        Person p2_1=(Person) p2;
        Student p2_3=(Student) p2_1;
        System.out.println("上溯造型"+p2_3.getStatus());
        list.add(p2);
        list.add(p1);
        Student p2_2=(Student)list.get(0);
        System.out.println("list上溯造型"+p2_2.getStatus());
        
    }
}

运行结果是报错:

Exception in thread "main" java.lang.ClassCastException: demo.Person cannot be cast to demo.Student
    at demo.Main1.main(Main1.java:11)

说明从Person转到Student是违法的

把那两行注释掉

package demo;

import java.util.ArrayList;
import java.util.List;

public class Main1 {

    public static void main(final String [] args) {
        List<Person> list=new ArrayList<>();
        Person p1=new Person("p1");
//        Student p1_2=(Student)p1;
//     System.out.println("person->student"+p1_2.getStatus());
       
        Student p2=new Student("还在","p2");
        Person p2_1=(Person) p2;
        Student p2_3=(Student) p2_1;
        System.out.println("上溯造型"+p2_3.getStatus());
        list.add(p2);
        list.add(p1);
        Student p2_2=(Student)list.get(0);
        System.out.println("list上溯造型"+p2_2.getStatus());
        
    }
}

运行结果:

上溯造型:还在

list上溯造型:还在

结论:强转数据类型,再强转回来并不会丢失数据,Person类型的list添加Student类个体,也不会丢失数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值