Java向下转型的意义

public interface Electronics{

}

很简单,什么方法都没有。

新建一个Thinkpad笔记本类,并实现电子产品接口:

public class Thinkpad implements Electronics{

//Thinkpad引导方法

public void boot(){

System.out.println(“welcome,I am Thinkpad”);

}

//使用Thinkpad编程

public void program(){

System.out.println(“using Thinkpad program”);

}

}

新建一个Mouse鼠标类,并实现电子产品接口:

public class Mouse implements Electronics{

//鼠标移动

public void move(){

System.out.println(“move the mouse”);

}

//鼠标点击

public void onClick(){

System.out.println(“a click of the mouse”);

}

}

新建一个Keyboard键盘类,并实现电子产品接口:

public class Keyboard implements Electronics{

//使用键盘输入

public void input(){

System.out.println(“using Keyboard input”);

}

}

这里子类比较多,是为了更好的理解。每个类的方法的逻辑实现也很简单。打印了一行信息

接下来,我们想象一个情景:我们去商城买电子产品,电子产品很多吧,比如笔记本电脑,鼠标,键盘,步步高点读机哪里不会点哪里,我们用的手机,等等,这些都属于电子产品。电子产品是抽象的。好,那么我们决定买一台Thinkpad,一个鼠标和一个键盘。

这时,我们需要一个购物车来装这些电子产品吧。我们可以添加进购物车,然后通过购物车还能知道存放的电子产品数量,能拿到对应的电子产品。

那么,一个购物车类就出来了,如下:

import java.util.ArrayList;

import java.util.List;

public class ShopCar{

private List mlist = new ArrayList();

public void add(Electronics electronics){

mlist.add(electronics);

}

public int getSize(){

return mlist.size();

}

public Electronics getListItem(int position){

return mlist.get(position);

}

}

List 集合是用来存放电子产品的,add 方法用来添加电子产品到购物车,getSize 方法用来获取存放的电子产品数量,getListItem 方法用来获取相应的电子产品。

可以看到 List 用了泛型的知识,至于为什么要用泛型?这个不做介绍了,泛型很重要的。

而我觉得比较疑惑的是为什么是放 Electronics 的泛型,而不是放Thinkpad,Mouse,Keyboard,Phone等?

那么如果是List,肯定是放不进鼠标Mouse的吧,难道要生成3个集合?这里是定义了3个电子产品类,但是我如果有100种电子产品呢,要定义100个集合?

这太可怕了。所以之前,我们写了一个Electronics接口,提供了一个Electronics的标准,然后让每一个Electronics子类都去实现这个接口。

实际上这里又涉及到了向上转型的知识点,我们虽然在add 方法将子类实例传了进来存放,但子类实例在传进去的过程中也进行了向上转型

所以,此时购物车里存放的子类实例对象,由于向上转型成Electronics,已经丢失了子类独有的方法,以上述例子来分析,Thinkpad实例就是丢失了boot() 和program() 这两个方法,而Mouse实例就是丢失了move()和onClick()这两个方法

但是实际使用Thinkpad或Mouse或Keyboard时,这种情况肯定不是我们想要的

接着我们写一个测试类 Test 去测试购物车里的电子产品。

测试类 Test 如下:

public class Test{

public static final int THINKPAD = 0;

public static final int MOUSE = 1;

public static final int KEYBOARD = 2;

public static void main(String[] args){

//添加进购物车

ShopCar shopcar = new ShopCar();

shopcar.add(new Thinkpad());

shopcar.add(new Mouse());

shopcar.add(new Keyboard());

//获取大小

System.out.println("购物车存放的电子产品数量为 ——> "+shopcar.getSize());

//开始测试thinkpad电脑

Thinkpad thinkpad = (Thinkpad)shopcar.getListItem(THINKPAD);

thinkpad.boot();

thinkpad.program();

System.out.println(“-------------------”);

//开始测试Mouse鼠标

Mouse mouse = (Mouse)shopcar.getListItem(MOUSE);

mouse.move();

mouse.onClick();

System.out.println(“-------------------”);

//开始测试Keyboard键盘

Keyboard keyboard = (Keyboard)shopcar.getListItem(KEYBOARD);

keyboard.input();

}

}

运行截图:

举个例子分析就好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值