码迷,mamicode.com
首页 > 其他好文 > 详细

强制类型转换

时间:2018-07-29 16:34:45      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:转换   eth   abstract   getname   stat   建立   div   abs   name   

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());//小黄
    }
}

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

强制类型转换

标签:转换   eth   abstract   getname   stat   建立   div   abs   name   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!