Animal b=new Bird(); //向上转型
b.eat();
此处将调用子类的eat()方法。原因:b实际指向的是Bird子类,故调用时会调用子类本身的方法。
需要注意的是向上转型时b会遗失除与父类对象共有的其他方法。如本例中的fly方法不再为b所有。
向上转型的好处
看下面的代码,
public static void dosleep(Animal b) {
b.sleep();
}
这里以父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。不然的话,
如果dosleep以子类对象为参数,则有多少个子类就需要写多少个函数。这也体现了JAVA的抽象编程思想。 作者: Ranger 时间: 2014-3-21 18:47
class fu{
method1(){}
}
class zi extends fu{
method2(){}
}
fu f = new zi();
f.method1();//子类的对象调用父类的方法,会自动向上转型
zi z = (zi) f;
z.method2;//子类调用子类特有的方法,需要强制向下转型。作者: 学习代码 时间: 2014-3-21 18:56