面向接口
面向接口(interface)是面向对象中非常重要的概念,面向接口编程是多态性的体现
为什么使用接口?
接口是实现开发规范化的重要功能,通过接口,规定实现类统一暴露的子类所必须提供的行为,这种行为是统一的,接口描述了一个行为的基本动作和实现,嗯..没错,接口的的确确限制了实现子类的实现,不过是非强制性的实现。 来看看实例代码
public interface Sort {
void sort(int[] arr);
default void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
来看这段代码,此接口暴露一个排序方法,要求实现子类实现,为什么说接口限制子类实现 通过分析参数和返回值以及标识符即可得出:
1.sort方法要求子类实现排序
2.sort方法要求对一个int数组排序
3.sort方法要求对消息传递所携带的数组进行排序,改变其源数组不产生新的数组
很多开发者认为一个接口的方法,是一个规范,实际上是对子类的实现要求,通过这些要求限制子类所行为,从而形成一个书面上的规范
public static void main(String[] args) {
//通过接口,可以动态的使用各种实现子类,而不需要过多关注实现细节
//尽管我们仍需要关注一点子类实现细节,但总归不需要全面细致的关心
int[] arr = new int[1024];
Sort sort =new BubbleSort();
sort.sort(arr);
//冒泡太慢?我们还有别的实现....
Sort quick=new QuickSort();
// Sort接口说quicksort能够排序,它就能
quick.sort(arr);
}
这样的实现方式听起来很美好不是吗? 如果是我,我恨不得只操作接口... 但也不尽然,还记得jdk的各种设计模式实现吗?很多没必要的强行设计使得其反而并不是那么优雅.如果我们只有一个或两个实现方法呢?对于这种,接口是根本没必要的,没有人写helloworld,还需要定义一个接口,规定helloworld的实现方式