Java向下转型的意义(摘要)

原文章:(https://blog.csdn.net/xyh269/article/details/52231944)
这篇博客就是讲向下转型的,那我们就来学习下向下转型,了解下这种特性的意义和使用场景
//定义了一个电子产品的接口

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");
}
}
//鼠标

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");
}
}
//键盘
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<Electronics> mlist = new ArrayList<Electronics>();

public void add(Electronics electronics){

    mlist.add(electronics);

}

public int getSize(){

    return mlist.size();
}


public Electronics getListItem(int position){

    return mlist.get(position);

}
}
这个List<Electronics>
我觉得比较疑惑的是为什么是放 Electronics 的泛型,而不是放Thinkpad,Mouse,Keyboard,Phone等? 
因为那么如果是List<Thinkpad>,肯定是放不进鼠标Mouse的。需要其他接口的类放入集合还要重新定义集合。会定义N个。。。

总结一下吧,很多时候,我们需要把很多种类的实例对象,全部扔到一个集合。(这句话很重要)
在这个例子里就是把Thinkpad笔记本,Mouse鼠标,KeyBoard键盘等实例对象,全部扔到一个Shopcar购物车集合。
但是肯定不可能给他们每个种类都用一个独立的集合去存放吧,这个时候我们应该寻找到一个标准,接口就是一个标准。这些都是各种电子产品,抽象成电子产品。然后一个Electronics接口就出来了。
在回到刚才,我们把很多种类的实例对象全部扔到一个集合。或许这样比较好理解:把很多种类的子类实例对象全部扔到存放父类实例的集合。
经过了这个过程,子类实例已经赋值给了父类引用(即完成了向上转型),但很遗憾的丢失了子类扩展的方法。
很好的是Java语言有个向下转型的特性,让我们可以重新获得丢失的方法,即强转回子类 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值