Lec9-Subtype Polymorphism, Comparators, Comparables, Generic Functions
Subtype Polymorphism
Java中没有重载运算符,故我们需要使用Comparable接口来实现类似功能
Java源码中对该接口的描述如下:
我们需要实现该接口
e.g. 定义Dog类,通过size属性比较两只狗的大小
1 | package Lec9; |
另一种写法
java规定了若更小则返回负数
1 |
|
这种操作被称为子类型多态
- 超类指定了可以干什么(如Comparable接口指定了比较功能)
- 子类通过重写超类的抽象方法,来使java根据调用方法的对象来决定运行时该做什么
Comparator
Java提供了接口Comparator用来比较其他对象
语法:
1 | public interface Comparator<T>{ |
Dog类中
1 | public static class NameComparator implements Comparator<Dog> { |
其中Dog.NameComparator()的数据类型为Comparator<Dog>
更现代的方式是使用lambda表达式定义comparator
1 | Comparator<Dog> dc =(d1, d2) -> d1.name.compareTo(d2.name); |
泛型函数
如何编写自己的方法
e.g. 实现一个方法,从数组中随机选择一个元素,并且接受各种类型
在这里,选择随机元素的方法是静态的,正确方式是让方法本身变为泛型,而非让类变为泛型
即声明了一个公共静态函数,用于处理类型T的对象
因为如果让整个类泛型化,你需要实例化那个类来获得泛型行为,但把该方法作为一个静态方法来看,并不需要实例化
1 | publicc class RandomPicker{ |