类之间父强转子的问题

普通类,父不能强转子,只有父对象实例化成子时,才可父转子,
那么父,子都是接口呢?
父,子都是抽象类呢,这些,父可以强转子吗?
希望详细回答,谢谢,

Java中父类强制转换为子类的可能

之前徒弟问了一个问题, 在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出来的, 就类似于一个本来就是儿子角色的人, 去装了一会儿父亲, 这个角色是可以在未来转换回去的, 但是一个父亲, 永远不可能去装儿子的.