向上转型
重新学习Java时看到j向上转型;
public class Test01{
public static void main(String[] args){
System.out.println("Hellow");
Bird b = new Bird();
Panda p = new Panda();
Lion l = new Lion();
Test01 t = new Test01();
t.move(b);
t.move(p);
t.move(l);
return;
}
protected void move(Animal a)//向上转型
{
a.eatting();
//a.fly(); 会报错
//a.sleep();
//a.run();
return;
}
}
class Animal
{
protected void eatting()
{
System.out.println("Animal Eatting");
}
}
class Bird extends Animal
{
protected void eatting()
{
System.out.println("Bird eatting worm!");
}
protected void fly()
{
System.out.println("Bird can fly!");
}
}
class Panda extends Animal
{
protected void eatting()
{
System.out.println("Panda eatting bamboo!");
}
protected void sleep()
{
System.out.println("Panda sleeping soundly!");
}
}
class Lion extends Animal
{
protected void eatting()
{
System.out.println("Lion eatting meat!");
}
protected void run()
{
System.out.println("Lion runs fast!");
}
}
显而易见的是,animal有三个子类“Bird”、“Panda”、“Lion”,且它们都重写了animal的方法"eatting",
在调用
t.move(b);
t.move(p);
t.move(l);
时候我们就用到了向上转型:将b、p、l转型为它们的父类animal,并调用eatting,由于父类没有fly等方法,故函数move中是无法调用函数a.fly()等等的。