接口 interface
Java接口是一系列方法的声明,是一些方法特征的集合
一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为
接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法
特点
就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的(即只有方法标识符,而没有方法体)
- 接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图
- 一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力
- 如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类)
为什么使用接口
- 接口被用来描述一种抽象
- 接口也被用来实现解耦
- 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的
接口的用法实现
- 接口的定义 interface
interface Computers
- 接口的实现 implements
class Add implements Computers{}
实例
/**
* 利用接口做参数,写个计算器,能完成加减乘除运算。
* (1)定义一个接口Compute含有一个方法int computer(int n, int m)。
* (2)设计四个类分别实现此接口,完成加减乘除运算。
* (3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),
* 此方法能够用传递过来的对象调用computer方法完成运算,并输出运算的结果。
* (4)设计一个主类Test,调用UseCompute中的方法useCom来完成加减乘除运算。
*
*/
public class Test2 {
public static void main(String[] args){
UseComper useComper = new UseComper();
useComper.useCom(new Add(),12,6);
useComper.useCom(new Sub(),12,6);
useComper.useCom(new Mul(),12,6);
useComper.useCom(new Div(),12,6);
}
}
interface Computers{
int computers(int n,int m);
}
class Add implements Computers{
@Override
public int computers(int n, int m) {
System.out.println("Add:" + (n + m));
return 0;
}
}
class Sub implements Computers{
@Override
public int computers(int n, int m) {
System.out.println("Sub:"+(n-m));
return 0;
}
}
class Mul implements Computers{
@Override
public int computers(int n, int m) {
System.out.println("Mul:"+(n*m));
return 0;
}
}
class Div implements Computers{
@Override
public int computers(int n, int m) {
System.out.println("Div:"+(n/m));
return 0;
}
}
class UseComper{
public void useCom(Computers com, int number1, int number2){
int result = com.computers(number1,number2);
System.out.println(result);
}
}
重点
- 我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的,这样怎么可能产生具体的实例呢?我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法
- 一个类可以实现不止一个接口
- 一个接口可以继承于另一个接口,或者另一些接口,接口也可以继承,并且可以多继承
- 一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法
- 接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的
接口的通俗理解(借鉴)
前面我们讲多态的时候用“空调”——“遥控器”的方式去理解多态,实际上在上面的的几个重点中的第一条讲的也是多态的实现,比如,我们可以把“节能”作为一种标准,或者说节能就是一个“接口”,这个接口中有一个方法,叫做变频方法,任何空调,如果要称得上叫做节能空调的话,那么必须实现“节能”这个接口,实现“节能”这个接口,也就必须实现“节能”接口中规定实现的“变频”方法,这样才算是真正的实现了“节能”这个接口,实现了“节能”这个功能。
当某个空调实现了“节能”接口后,这个空调就具备了节能的功能,那么我们也可以不用空调类的引用指向空调对象,我们可以直接使用一个“节能”接口类型引用的“遥控器”去指向“空调”,虽然这个“遥控器”上面只有一个按键,只有一个“变频”的方法,但是“遥控器”所指向的空调是实现了“节能”这个接口的,是有“变频”方法的实现的,我们用这个只有一个“变频”方法的遥控器去命令空调调用“变频”方法,也是行得通的
PS.
渐渐摆脱最开始的迷茫,寻找到适合自己的学习方式,将一个个小的知识点进行拆分后实际运用并在熟悉后相融合
网友评论