定义两个类
public class Test{ 父类
}
public class TestExtend extends Test{ 子类
}
根据java多态,子类继承父类,子类可以强转为父类,说明子类就是父类,但是父类却不是子类,所以父类不能强转为子类
在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。但是,反过来就不行
子类对象可以声明为父类类型,父类对象不可以声明为子类类型
Test a=new TestExtend(); 正确
TestExtend b=new Test(); 错误
在子类对象声明为父类类型后,可以通过强制转型,转型回来
Test a=new TestExtend();
TestExtend a=(TestExtend) b; 正确
而父类对象声明为父类类型之后,并不能执行强制类型转化
Test a=new Test();
TestExtend a=(TestExtend) a; 错误
因为在子类对象声明为父类类型后,其实对象的真实意义还是子类对象
Test a=new Test();
Test b=new TestExtend();
System.out.println(a instanceof TestExtend) ; 输出false
System.out.println(b instanceof TestExtend); 输出为true
System.out.println(b instanceof Test); 说明子类就是父类