父类对象到底能不能强制转换为子类对象

首先是可以的。前提是:此父类对象为子类对象强转的结果 例如:
  Father father = (Father)son;
当这种情况时,可以用instanceof判断是否是子类类型(实际) 然后强转回去
  if(father instanceof Son)
     Son son =(Son)father;

除此之外,不行。

往深了讲。子类强制转换为父类对象时,并没有实际丢失它原有内存空间(比父类多的那些部分)只是暂时不可访问。所以能再转回来。
  另:父类对象可接受任何子类对象--此时发生自动转型--》转为父类类型--》所以能够再转回来。用instanceof 是防止错误的一种方式。


另外,参考如下博客内容:

https://www.cnblogs.com/hanbin/p/4780607.html

之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象?

到底能不能, 今天就来说说这个问题, 先看下面一段代码:

复制代码
package cn.com.hanbinit.test;
/**
 * 检验父类是否可以强转为子类
 * @author icer
 *
 */
public class ConvertPro extends Father {

    public static void main(String[] args) {
        Father father = new Father();
        Father father1 = new ConvertPro();
        ConvertPro son = new ConvertPro();
        // ConvertPro son1 = (ConvertPro) new Father();
        // son = (ConvertPro)father;
        son = (ConvertPro) father1;
    }
}

/**
 * 父类
 * 
 * @author icer
 * 
 */
class Father {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
复制代码

上面代码注释掉的两行是会运行错误的. 根据代码显示,  只有我们的父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.

子类继承父类的所有(包括属性以及方法), 也就是说子类包含的内容应该是比父类要大的. 如果正常环境下, 把一个父类转换成子类一定会损失精度.  但是如果父类对象本身就是用

子类去new出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FeelTouch Labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值