继承中类型的转换

执行以下代码:

class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}

public class TestCast
{
    public static void main(String args[])
    {
        Mammal m;
        Dog d=new Dog();
        Cat c=new Cat();
        m=d;
        d=m;
        d=(Dog)m;
        d=c;
        c=(Cat)m;

    }
}

这个程序不能正常运行,因为在主函数里d=m;这句话不符合Java的规则,

在继承中,基类不能对子类的对象赋值,而子类可以对基类的对象赋值,

而且,非继承关系的两个类再赋值是也应该先进行强制转化,比如:d=c;,

强制转化也不是每次都可以成功的。可以使用instanceof运算符判断一个对

象是否可以转换为指定的类型,如果可以,则继续进行。

原文地址:https://www.cnblogs.com/ljysy/p/7805301.html