一个小问题不大明白

alittlekidwyw 2004-01-12 10:42:29
class base{}
class sub extends base{}
class sub2 extends base{}
public class CEx{
public static void main(String args[]){
base b = new base();
sub s = (sub) b;
}
}
象这段程序,编译的时候能通过,执行的时候报错,是不是因为sub s = (sub) b;不能转换?什么原因呢?
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alittlekidwyw 2004-01-12
  • 打赏
  • 举报
回复
明白了,可惜分数太少,不能每个人都给。*^_^*
danceflash 2004-01-12
  • 打赏
  • 举报
回复
to friendsk(诺诺书虫):
应该是:
sub s = new sub();
base b = (base) s;

^_^
danceflash 2004-01-12
  • 打赏
  • 举报
回复
自动向上转型和强制向下转型

base b = new base();
new出来的就是父类的实例,它不具备子类的任何特性
因此不能强制向下转型,所以
sub s = (sub) b;
不成立

相应的
base b = new sub();
是成立的
new 出来的是子类的实例,它具备父类的所有共性
因此可以自动向上转型

推荐参看 Thinking in Java 2nd 前 8 章 ^_^
kenli 2004-01-12
  • 打赏
  • 举报
回复
这个是代码在编译时期看上去是没错的。但是到了执行时期,就发现b不是一个sub的实例,就会出错。
friendsk 2004-01-12
  • 打赏
  • 举报
回复
子类的实例不可以等于父类,但是父类的实例可以等于子类
如果是:
sub s = new sub();
base b = (base) b;
就可以。

62,623

社区成员

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

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