强制类型转换

1,向上转型,安全,具体化到抽象化

2,向下转型,不安全,抽象化到具体化

建立两个对象,动物抽象类Animal和狗狗类Dog

public abstract class Animal {
    public abstract  void  dosomething();
}

public class Dog extends Animal{
    private String name;

    public Dog(String s) {
        this.name=s;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void dosomething() {
        System.out.println("狗狗会跑");
    }
}

  写一个测试类

public class Test {
    public static void main(String[] args) {
        //向上转型,安全,将狗对象赋值给动物变量
        Animal animal=null;
        Dog dog=new Dog("小黄");
        animal=dog;
        System.out.println(((Dog) animal).getName());//小黄

        //向下转型,不安全,将动物对象赋值给狗变量
        Dog dog1=null;
        //dog1=animal;//编译报错:incompatible type 不相容类型
        //把animal强转为Dog类型,编译通过
        dog1= (Dog) animal;
        System.out.println(dog1.getName());//小黄
    }
}

 总结:将一个对象赋值给一个变量,主要看该对象是不是这个变量的一个实例,如将狗对象赋值给动物变量(向上转型,安全,具体化到抽象化),狗是动物的一个实例,反之,如果将动物对象赋值给狗变量(向下转型,不安全,抽象化到具体化),则为动物是狗的实例,不符合逻辑,

原文地址:https://www.cnblogs.com/guochengfirst/p/9385446.html