黑马程序员技术交流社区
标题:
多态 向上向下转型的使用
[打印本页]
作者:
clp
时间:
2013-5-24 20:46
标题:
多态 向上向下转型的使用
本帖最后由 clp 于 2013-5-25 06:35 编辑
1,多态中,什么时候需要向上转型,向下转型,它们之间的区别在什么地方?学到这里,的时候有点模糊,能否给例子,详细介绍一下
作者:
Super_Class
时间:
2013-5-24 22:01
|——多态的转型:
向上转型:限定功能使用,提高扩展性
Animal a = new cat();//自动类型提升
abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){
System.out.println("猫抓老鼠");
}
}
//一旦完成了这个自动转型,就不能访问特有的行为
//上边的 对象 a 就不能访问cat 类里边没有从Animal里边继承来的catchMouse方法
|--向下转型:这样是为了调用特有的方法。
Cat c = (Cat)a;
注-->注-->抽象类可以实例化
总的来说:
如果子类继承父类后,没有对方法进行覆盖,那么自动转型后是可以使用父类中的方法。
如果子类方法将父类方法覆盖了,那么调用的就是子类中地方法。
但是,如果父类本来就没有这个方法。转型后,硬要调用这个方法,编译失败。
abstract class Animal{
abstract void eat();
void sleep(){
System.out.println("Sleep");
}
}
class Cat extends Animal{
public void eat(){
System.out.println("eat fish");
}
public void catchMouse(){
System.out.println("catchmouse");
}
}
public class Test{
public static void main(String []args){
Animal a = new Cat();
a.sleep();
// a.catchMouse();直接编译失败
}
}
复制代码
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油
作者:
clp
时间:
2013-5-24 23:02
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油
清楚明了,谢谢:handshake
作者:
神之梦
时间:
2013-5-25 01:27
Super_Class 发表于 2013-5-24 22:01
虽然看起来你只是来争取技术分的。但是还是给予支持吧!加油
{:soso_e179:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2