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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lin0411 中级黑马   /  2014-5-2 18:56  /  1166 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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才对呀,求大神指点。

评分

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

查看全部评分

1 个回复

倒序浏览
  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. //只要是子类对象在做类型转换,就遵守多态的规则,执行被覆盖的非静态方法时参照子类的方法。
复制代码

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
Silent_memory + 1 赞一个!
Lin0411 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马