?????

古市轩 2011-03-16 08:21:51
class A
{
String a="class A";
}

class B extends A
{
String b="class B";
}

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

A a1=new A();
A a2=new A();
B b1=new B();
B b2=new B();
a1=b2;
b1=(B)a2;
System.out.println(a1.a);
System.out.println(b1.b);
}
}
//请问为什么编译能通过,却不能运行?
...全文
52 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
古市轩 2011-03-16
  • 打赏
  • 举报
回复
嗯,谢谢你的回答!
a1的引用类型是B了,但是却不能用B中的变量b,即a1.b连编译也不能通过!
我在书中看到父类可以强制转换成子类,是怎么实现的呢?父类转换成子类后,父类能不能用子类中的成员变量和成员方法呢?
runer 2011-03-16
  • 打赏
  • 举报
回复
因为你前面的一句 a1=b2;

a1的引用类型实际上是B了
古市轩 2011-03-16
  • 打赏
  • 举报
回复
但是如果把b1=(B)a2;改为b1=(B)a1;为什么就可以运行了呢?

runer 2011-03-16
  • 打赏
  • 举报
回复
A a2=new A();

a2是A的实例,b1是B的实例,B是A的子类

a2不能强制转换为b1
(反过来可以)


所以运行会报类型转换错


java编译器在编译期间不会也无法进行这样的类型检查

23,404

社区成员

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

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