1. 简介
在前一章节我们了解了Java向上转型和向下的简单使用,在该章节主要介绍它们的使用场景和意义。
2. 示例
2.1 新建一个电子产品的父类 Electronics:
1 public class Electronics {
2
3 public void getMarketName(){
4 System.out.println("All goods come form SN.");
5 }
6
7 public void getPrice(){
8 System.out.println("The Price of product is ...");
9 }
10 }
2.2 新建键盘类 Keyboard 和鼠标类Mouse,并且继承父类 Electronics:
键盘类 Keyboard:
1 public class Keyboard extends Electronics{
2 //使用键盘输入
3 public void input(){
4 System.out.println("use Keyboard input");
5 }
6
7 @Override
8 public void getPrice() {
9 System.out.println("The price of Keyboard is $20.");
10 }
11 }
鼠标类Mouse:
1 public class Mouse extends Electronics{
2 //鼠标移动
3 public void move(){
4 System.out.println("move the mouse");
5 }
6
7 @Override
8 public void getPrice() {
9 System.out.println("The price of Mouse is $10.");
10 }
11 }
2.3 情景构建
假设我们去电子商城买产品,需要一个鼠标和一个键盘。我们可以在购物车中添加电子产品,并且可以通过购物车查看电子产品及数量。
新建一个购物车类ShopCar:
1 import java.util.*;
2
3 public class ShopCar {
4 private List<Electronics> mList = new ArrayList<>();
5
6 // 添加商品
7 public void add(Electronics electronics){
8 mList.add(electronics);
9 }
10
11 // 获取商品数量
12 public int getSize(){
13 return mList.size();
14 }
15
16 // 获取指定商品
17 public Electronics getListItem(int position){
18 return mList.get(position);
19 }
20 }
注意点如下:
在添加商品方法 add(Electronics electronics) 中,参数类型为Electronics,而未使用具体的商品类型,例如Keyboard和Mouse。
这样写的优势在于只需要创建一个add方法即可满足往购物车中添加商品,不必为所有不同的商品分别创建add方法。
这里涉及到了向上转型,体现出了向上转型的优势。
2.4 测试购物车的功能,新建测试类Test:
1 public class Test {
2
3 private static final int MOUSE = 0;
4 private static final int KEYBOARD = 1;
5
6 public static void main(String[] args){
7 //添加进购物车
8 ShopCar shopcar = new ShopCar();
9 shopcar.add(new Mouse()); // 向上转型
10 shopcar.add(new Keyboard()); // 向上转型
11
12 //获取大小
13 System.out.println("购物车存放的电子产品数量为 ——> "+shopcar.getSize());
14 System.out.println("-------------------");
15
16 //开始测试Mouse鼠标
17 Mouse mouse = (Mouse)shopcar.getListItem(MOUSE); // 向下转型
18 mouse.move();
19
20 //开始测试Keyboard键盘
21 Keyboard keyboard = (Keyboard)shopcar.getListItem(KEYBOARD); // 向下转型
22 keyboard.input();
23 }
24 }
运行结果和具体说明如下:
1. 第9、10行的实参为新创建的鼠标和键盘对象,运用了向上转型;
2. 在完成向上转型后,此时购物车中的鼠标和键盘丢失了自身独有的方法,例如鼠标丢失了move方法。
在实际的使用场景中这是我们不愿意看到的,因此需要向下转型,重新获取丢失的方法,示例代码见第17-18,21-22行。
3. 说明
从上面的示例可知,向上转型和向下转型一般需要配合使用。向上转型的意义在于当多个同父对象需要创建某一方法时,
无需多次重复创建该函数,可以通过类型的向上转换确立统一的参数标准,创建一个统一的方法即可。在向上转型的过
程中子类实例丢失了自身独有的方法,为了重新获取这些方法,向下转型的出现完美地解决了该问题。
4. 参考文献