奥雷迪尔

导航

多态向上转型,向下转型

abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
void eat(){
System.out.println("eat fish");
}
void catchMouse(){
System.out.println("catchMouse");
}
}
class Dog extends Animal{
void eat(){
System.out.println("eat bone");
}
void Kanjia(){
System.out.println("bark");
}
}
public class DuoTaiDemo {
public static void main(String[] args){
// Animal a=new Cat();//类型提升,向上转型
// a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用。转成子类类型。向下转型
// Cat c=(Cat)a;
// c.catchMouse();
//千万不要出现这样的操作,就是将父类对象转成子类类型
//我们能转换的是父类应用转换成了自己的子类对象时,该引用可以被提升也可以被强制转换
// 多态自始至终都是子类对象在做着
//Animal a=new Animal();
//Cat c=(Cat)a;错的
function(new Cat());
function(new Dog());
}
public static void function(Animal a){
a.eat();
if(a instanceof Cat){
Cat c=(Cat)a;
c.catchMouse();
}
else if(a instanceof Dog){
Dog d=(Dog)a;
d.Kanjia();
 
}
}
 
}
 
 
运行结果:

 
  1. eat fish  
  2. catchMouse  
  3. eat bone  
  4. bark  

posted on 2017-07-10 19:44  奥雷迪尔  阅读(169)  评论(0编辑  收藏  举报