A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© iBadboy 中级黑马   /  2013-7-21 18:50  /  951 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class A
  2. {
  3. String a="class A";
  4. }
  5. class B extends A
  6. {
  7. String b="class B";
  8. }
  9. class Test
  10. {
  11. public static void main(String[] args)
  12. {
  13.   A a1,a2=new A();
  14.   B b1,b2=new B();
  15.   a1=b2;
  16.   b1=(B)a1;
  17.   //b2=(B)a2;
  18.   System.out.println(a1.a);
  19.   System.out.println(b1.b);
  20. }
  21. }
复制代码
刚看到一个题,我知道子类的对象可以赋给父类的对象,那父类的对象可以赋给子类吗?我注释掉的b2=(B)a2;在编译时没有错,运行时显示有错,A cannot be cast to B。而b1=(B)a1;却又为啥是对的?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
多态中成员函数的特点:
        在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败。
        在运行期间,参阅对象所说的类中是否有调用的方法。
        总结:编译看左边,运行看右边       
在多态中成员变量的特点,无论编译还是运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点,无论编译和运行都参考左边。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
巩建 发表于 2013-7-21 18:55
多态中成员函数的特点:
        在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没 ...

多谢解释啦。。。我记下来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马