对象转型

     对一些JAVA的基础概念一直了解得不透彻,比如说对象的转型,在网上搜了一下,找了一些文章,在这里简单的总结一下。对文章的引用部分版权规原作者所有

 

一对象的上转型对象

     假设,A类是B类的父类,当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如

A a=new B();

A a;

B b=new B();

a=b;

称这个父类对象 a,是子类对象b的上转型对象。好比说“老虎是哺乳动物”。对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点:

1   上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能使用子类新增的方法(失掉了一些功能)。

2   上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的或重写的方法。

3   如果子类重写了父类的某个方法后,当对象的上转型对象调用这个方法时一定是调用了这个重写的方法,因为程序在运行时知道,这个上转型对象的实体是子类创建的,只不过损失了一些功能而已。

 

 

注:不要将父类创建的对象和子类对象的上转型对象混淆。

 

可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所给的所有属性和功能。

不可以将父类创建的对象的引用赋值给子类声明的对象(不能说“哺乳动物是老虎”)。

下面的例子中,m是People类型对象的上转型对象。

     例子21:

       class 类人猿

           {

               private int n=100;

              void crySpeak(String s)

                  {

                        System.out.println(s);

                  }

           }

   class People extends 类人猿

          {

                 void computer(int a,int b)

                    {

                        int c=a*b;

                       System.out.println(c);

                    }

        void crySpeak(String s)

                   {

                        System.out.println("**"+s+"**");

                  }

          }

    class Example4_21

         {

              public static void main(String args[])

                  {

                       类人猿 m=new People(); //m是People对象的上转型对象。

                       m.crySpeak("I love this game");

                      People people=(People)m; //把上转型对象强制转化为子类的对象。

                      people.computer(10,10);

                  }

        }

在上述例子中,上转型对象m调用方法:

    m.crySpeak("I love this game");

得到的结果是“**I love this game**”。而不是“I love this game”。

因为m调用的是子类重写的方法crySpeak。

注:不可以

        m.n=1000;

因为子类本身就没有继承n,也不可以

   m.computer(10,10);

因为computer是子类新增的方法。

 

通常来说,上转型对象是安全的,而下转型是不安全的。(在这里要感谢CSDN徐老师,非常的感谢!)

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值