JAVA向上转型和向下转型(三)
2017-03-11 15:54
435 查看
向下转型有什么用?
定义一个Animal父类:
public class Animal {
public void eat(){
System.out.println("吃饱了!");
}
}
定义一个Bird类继承Animal:
public class Bird extends Animal {
public void fly(){
System.out.println("飞起来!!");
}
}
定义一个Dog类继承Animal:
public class Dog extends Animal {
public void run(){
System.out.println("跑起来!!");
}
}
编写一个zoo类,可以添加动物,并且饲养动物。
public class Zoo {
public List<Animal> animals = new ArrayList<>();
public void add(Animal a){
animals.add(a);
}
public Animal getAnimal(String str){
if("Dog".equals(str)){
for(Animal a:animals){
if(a instanceof Dog){
return a;
}
}
}else if("Bird".equals(str)){
for(Animal a:animals){
if(a instanceof Bird){
return a;
}
}
}
return null;
}
运行以下代码:
Zoo z = new Zoo();
Dog d = new Dog();
Bird b = new Bird();
//向上转型
z.add(d);
z.add(b);
//向下转型
Dog d1 = (Dog)z.getAnimal("Dog");
Bird b1 = (Bird) z.getAnimal("Bird");
d1.eat();
d1.run();
b1.eat();
b1.fly();
得到结果:
吃饱了!
跑起来!!
吃饱了!
飞起来!!
在我们编程的过程中通常会把很多种类的子类实例对象全部扔到存放父类实例的集合。 经过了这个过程,子类实例已经赋值给了父类引用(即完成了向上转型),但很遗憾的丢失了子类扩展的方法。
当我们需要用到集合中子类实例其特有方法时,可以利用向下转型特性,重新获得丢失的方法。
定义一个Animal父类:
public class Animal {
public void eat(){
System.out.println("吃饱了!");
}
}
定义一个Bird类继承Animal:
public class Bird extends Animal {
public void fly(){
System.out.println("飞起来!!");
}
}
定义一个Dog类继承Animal:
public class Dog extends Animal {
public void run(){
System.out.println("跑起来!!");
}
}
编写一个zoo类,可以添加动物,并且饲养动物。
public class Zoo {
public List<Animal> animals = new ArrayList<>();
public void add(Animal a){
animals.add(a);
}
public Animal getAnimal(String str){
if("Dog".equals(str)){
for(Animal a:animals){
if(a instanceof Dog){
return a;
}
}
}else if("Bird".equals(str)){
for(Animal a:animals){
if(a instanceof Bird){
return a;
}
}
}
return null;
}
运行以下代码:
Zoo z = new Zoo();
Dog d = new Dog();
Bird b = new Bird();
//向上转型
z.add(d);
z.add(b);
//向下转型
Dog d1 = (Dog)z.getAnimal("Dog");
Bird b1 = (Bird) z.getAnimal("Bird");
d1.eat();
d1.run();
b1.eat();
b1.fly();
得到结果:
吃饱了!
跑起来!!
吃饱了!
飞起来!!
在我们编程的过程中通常会把很多种类的子类实例对象全部扔到存放父类实例的集合。 经过了这个过程,子类实例已经赋值给了父类引用(即完成了向上转型),但很遗憾的丢失了子类扩展的方法。
当我们需要用到集合中子类实例其特有方法时,可以利用向下转型特性,重新获得丢失的方法。
相关文章推荐
- Java向上转型与向下转型(good)
- JAVA的向上转型与向下转型(二)
- Java中的向上转型 & 向下转型 ( OOP )
- java 对象的向上、向下转型
- Java多态(利用向上向下转型和反射机理)
- java向上转型 向下转型(upcasting downcasting)
- Java向上转型与向下转型
- Java 向上转型与向下转型
- java中向上转型(upcast)和向下转型(downcast)
- Java 向下和向上转型
- JAVA中的向下转型(downcasting)及泛型与向上转型(upcasting)及RTTI、反射机制
- java 向上转型和向下转型
- java向上转型和向下转型
- JAVA中的向上转型与向下转型
- Java向上转型与向下转型
- Java 向上转型和向下转型
- Java 向上转型和向下转型
- JAVA中的向上转型与向下转型
- java向上转型与向下转型
- JAVA中的向下转型(downcasting)及泛型与向上转型(upcasting)及RTTI、反射机制