在Comparable/Comparator接口中通过泛型指定比较对象的数据类型, 在Collection集合中,通过泛型指定集合元素的类型。
泛型就是把数据类型参数化。
泛型的好处,可以在编译时进行数据类型检查。
如:
Collection<String> collection = new ArrayList<>(); 约束collection集合中只能存储String类型的数据。
Collection collection = new ArrayList<String> (); 如果在定义collection集合时没有指定泛型 ,在创建ArrayList对象时指定了泛型, 是没有作用的, 当前的collection集合依然是存储Object类型的数据。
定义一个攻击接口Attackable, 封装一个attack()攻击操作
定义一个移动接口Movable, 封装一个move()移动操作
定义一个坦克类Tank, 坦克既可以移动,又可以攻击
定义一个战斗机类Flighter, 战斗机也可以移动与攻击
定义一个导弹类Missile, 导弹只能攻击不能移动
坦克,战斗机,导弹都是武器, 所有武器都能攻击
定义一个部队类Army, 该部队有若干武器(使用集合存储武器对象). 在部队类中定义一个添加武器的方法,可以把武器添加到集合中; 定义一个判断指定的武器是否存在的方法; 定义一个方法, 给武器库中所有的武器下达攻击指令, 让集合中的所有武器攻击; 定义一个方法, 给所有武器下达移动指令, 让集合中的能移动的武器移动
Tank t = new Tank();
t instanceof Tank 返回true
t instanceof Movable 返回true, Tank实现了Movable接口