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