黑马程序员技术交流社区

标题: 特别简单的类型转换的问题,求解释。 [打印本页]

作者: Lin0411    时间: 2014-5-2 18:56
标题: 特别简单的类型转换的问题,求解释。
本帖最后由 Lin0411 于 2014-5-2 20:07 编辑

在学习毕老师关于多态问题的时候产生了一些疑问,例如下代码:
class A
{
    public void show()
    {
          System.out.println("A");
    }
}


class B   extends A
{
     public void show()
     {
         System.out.println("B");
     }
}


public class Test
{
    public static void main(String[] args)
    {
         A a1 = new B();
         a1.show();
         A  a2 = (A)(new B());
         a2.show();
    }
}

为什么输出的是两个B,a2已经强制转换成了A类型,应该输出A才对呀,求大神指点。
作者: 谢振宣    时间: 2014-5-2 19:37
  1. class A
  2. {
  3.         public void show()
  4.         {
  5.                   System.out.println("A");
  6.         }
  7. }


  8. class B   extends A
  9. {
  10.      public void show()
  11.      {
  12.          System.out.println("B");
  13.      }
  14. }


  15. public class Demo
  16. {
  17.     public static void main(String[] args)
  18.     {
  19.          A a1 = new B();
  20.          a1.show();
  21.          A  a2 = (A)(new B());//此处指向的对象依然是子类对象,同第一种创建方式没区别
  22.          a2.show();
  23.                  A a3 = new A();//只有此时父类引用才会指向父类对象。此处不是多态。
  24.                  a3.show();
  25.     }
  26. }
  27. //多态中,自始至终都是子类对象在做类型转换。
  28. //只要是子类对象在做类型转换,就遵守多态的规则,执行被覆盖的非静态方法时参照子类的方法。
复制代码





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