文章目录
- 前言
- 一、接口(interface)的设计要点与抽象类的区别
- 二、接口(interface)的应用实例
- 2.1、创建一个接口(interface)
- 2.2、创建实现接口的类
- 2.3、通过接口回调调用被类实现的方法
- 总结
前言
面向抽象原则是面向对象四大基本原则的第一条,其重要性不言而喻,面向抽象原则分为抽象类、接口以及面向抽象编程,由于篇幅有限本文我们主要细说接口(interface)的设计与应用,并通过引入案例的形式使概念更便于理解。除去介绍接口(interface)的设计与应用,同时对两个特别容易混淆的概念——抽象(abstract)类与接口(interface)进行对比。
一、接口(interface)的设计要点与抽象类的区别
- 接口中只可以有 public 权限的 abstract 方法,不能有非 abstract 方法。注意这里接口与抽象类的区别,抽象类中既可以有 abstract 方法,也可以有非 abstract 方法。
- 接口由类去实现,即一个类如果实现一个接口就必须重写接口中的 abstract 方法,即将 abstract 方法重新声明,但必须去掉 abstract 修饰符,同时要保证声明的方法名字、返回类型、参数个数和接口中的方法完全相同。这一点与抽象类的非抽象子类重写父类 abstract 方法的要求是相同的。
- 接口回调。接口回调是指把实现接口的类的对象的引用赋给该接口声明的接口变量中,这时该接口变量就可以调用被类实现的接口中的方法。接口回调原理类似于抽象类中的上转型对象调用子类方法的过程。
二、接口(interface)的应用实例
2.1、创建一个接口(interface)
首先我们创建一个接口(interface)Com,里面有一个 abstract 方法 sub(int x, int y),相应代码如下:
代码语言:javascript复制package com.bailu.principle;
/*
* 接口中只可以有public权限的abstract方法,不能有非abstract方法
*/
public interface Com {
public abstract int sub(int x, int y);
}
2.2、创建实现接口的类
接着我们创建实现接口 Com 的类 ComImp,并且重写接口中的 abstract 方法 sub(int x, int y),将其实现为计算参数 x 与 y 的差,相应代码如下:
代码语言:javascript复制package com.bailu.principle;
/*
* 接口由类去实现,一个类如果实现一个接口,就必须重写接口中的abstract方法
* 重新将接口中的abstract方法声明,但必须去掉abstract修饰符去掉
* 同时要保证声明的方法名字、返回类型、参数个数和接口中的方法完全相同
* 这一点与抽象类的子类重写抽象类的abstract方法相同
*/
public class ComImp implements Com {
// 在重写Com接口中abstract方法的同时,将其实现为计算参数x与y的差
@Override
public int sub(int x, int y) {
return x - y;
}
}
2.3、通过接口回调调用被类实现的方法
通过上述接口回调的原理,这里我们让 Com 接口声明的接口变量 com 存放 ComImp 类的对象的引用,那么这时 com 就可以调用 ComImp 类中实现的接口的方法 sub(int x, int y),相应代码如下:
代码语言:javascript复制package com.bailu.principle;
/*
* 让Com接口声明的接口变量com存放ComImp类的对象引用
* 那么com就可以调用ComImp类实现的接口中的方法
*/
public class ApplicationImpl {
public static void main(String[] args) {
Com com;
com = new ComImp();// com变量存放ComImp类的对象的引用
int m = com.sub(6, 3);// com回调ComImp类实现的接口方法
System.out.println(m);
}
}
运行结果如下图所示:
总结
在本文给大家介绍了面向抽象原则概念中的接口的内容,说明了在开发中接口(interface)的设计要点,并在设计要点中与抽象(abstract)类的内容进行了对比,最为明显的一点区别就是,在抽象(abstract)类中既可以有 abstract 方法,也可以有非 abstract 方法,而在接口中只能有 public 权限的 abstract 方法,不能有非 abstract 的方法。另外,多注意在抽象类中提到的上转型对象与接口中的接口回调两个核心概念。