向上造型与向下造型
博客专区 > DARK_CS 的博客 > 博客详情
向上造型与向下造型
DARK_CS 发表于10个月前
向上造型与向下造型
  • 发表于 10个月前
  • 阅读 98
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

首先,解释一下什么是向上造型和什么向下造型。

向上造型:子类引用的对象转换为父类类型。例如:A类是父类,B类是子类。提到子类和父类用B类继承A类更合适。A a = new B();

注:向上造型的一个特点:当子类向上造型后的对象的方法中不存在子类的自己的特色的方法,只有父类的方法。而且子类对于父类进行重写的方法。向上造型的对象的方法为重写后新的方法。

向下造型:父类引用的对象转换为子类类型。但是对于父类的引用对象一定要是由子类实例化的,也就是说向下造型的出现一般的情况都是和向上造型一起出现的。

举个例子来说明一下上面的一段话的意思:

A类是父类,B类是子类

A a = new A(); B b = new B();

A a1 = b; ---向上造型

B b1 =(B)a1;-----向下造型

B b2 = (A)a;--------这个就会报错。ClassCastException

下面我在多说几句,这个向下造型在我们开发中具体作用。单独看向下造型是没有什么作用。和我在上面描述的其实向下造型就是向上造型的反向作用。我们的世界是平衡的,既然java的开发者发明了向上造型,你应该一起发明了向下造型。

下面这一段的解释希望大家对于泛型有一定的理解。如果不了解泛型的概念,简单了解泛型的概念进行阅读。

我给大家通过的一个现实的事件说起:

体育馆里面有一个球柜,里面放着足球,篮球,排球。

public Interface ball{

}

public class football extends ball{

         public void place(){ System.out.println("football place"); }

}

public class basketball extends ball{

         public void place(){ System.out.println("basketball place"); }

}

public class volleyball extends ball{

         public void place(){ System.out.println("volley place"); }

}

然后我们想把这些球放到球柜里面,定义下面的list

List<ball> ballplace = new ArrayList<ball>();

运用向上造型:

Ball a = new football();

Ball b = new basketball();

Ball c = new volleyball();

ballplace.add(a);

ballplace.add(b);

ballplace.add(c);

这样就将足球,篮球,排球的集体球放进去了。不然就要定义足球柜,篮球柜,排球柜。要是有更多的就会定义很多集合。这样不堪设想。

想一想我们前面说的向上造型后,子类的各自的特有方法就没有了。那么我们从集合里面取出a,b,c的时候我们有想使用子类的特有方法怎么办呢!这里我们就用到了向下造型。取出a,b,c对象后用向下造型将它们转化成football,basketball,volleyball。这样就能用它们各自自己的方法了。这也是向下造型的具体用处。

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 1
码字总数 731
×
DARK_CS
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: