黑马程序员技术交流社区

标题: 关于继承的一个问题 [打印本页]

作者: iBadboy    时间: 2013-7-21 18:50
标题: 关于继承的一个问题
  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;却又为啥是对的?

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

作者: iBadboy    时间: 2013-7-21 23:00
巩建 发表于 2013-7-21 18:55
多态中成员函数的特点:
        在编译时期,参阅引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没 ...

多谢解释啦。。。我记下来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2