请解释一个多态父母转子类的问题

dingdot 2015-12-25 03:41:16


public class Test {
public static void main ( String[] args ) {

//向上转型又被称作:
Animal a1 = new Cat();

a1.eat(); //猫吃鱼

Animal a2 = new Cat(); //向上转型

//向下转型
Cat c1 = ( Cat ) a2;
c1.move(); //猫在走路

//编译正常通过,但是执行时,提示
//Exception in thread "main" java.lang.ClassCastException: Animal cannot be cast to Cat
//at OverrideTest.main(OverrideTest.java:28)
Animal a3=new Animal();
Cat c2=(Cat)a3; //此外为何不能将Animal转为Cat
c2.move();

}
}

class Animal {
public void eat() {
System.out.println ( "动物正在吃东西" );
}
}

class Cat extends Animal {
//overrite
public void eat() {
System.out.println ( "猫吃鱼" );
}

public void move() {
System.out.println ( "猫在走路" );
}
}

...全文
66 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlyshao 2015-12-25
  • 打赏
  • 举报
回复
a3是animal类型的引用指向了animal的对象,所以不能强制转换成cat类型。 而你之前写的是anmal类型的引用指向cat类型,所以可以转换成cat类型。 引用指向谁才能转换成谁。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧