标签:转换 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