接口
- 接口也是一种引用数据类型。
- 接口是完全抽象的。(抽象类是半抽象。)或者也可以说接口是特殊的抽象类。
一、接口的基础语法
1、接口的语法
[修饰符列表] interface 接口名 {
}
[修饰符列表] class 类名{
}
2、接口支持多继承,一个接口可以继承多个接口
interface A{
}
interface B{
}
interface C extends A,B{
}
3、接口中只包含两部分内容
- 常量(不能修改)
- 抽象方法
接口没有其它内容,只有以上两部分。
4、接口中的所有元素都是public修饰的
5、接口中的抽象方法定义时:public abstract
修饰符可以省略
6、接口中的方法都是抽象方法,所以接口中的方法不能有结构体和方法体
7、接口中的常量的public 、static、final可以省略。
8、类实现接口实现方法
基础语法: 类和类之间叫做继承,类和接口之间叫做实现。
语法结构:
- 继承使用
extends
关键字完成。 - 实现使用
implements
关键字完成。
interface MyMath{
double PI=3.1415;
int sum(int a,int b);
int sub(int a,int b);
}
//正确写法
abstract class MyMathImp1 implements MyMath{
}
错误:MyMathImp1不是抽象的,并且未覆盖MyMath中的抽象方法
/*class MyMathImp1 implements MyMath{
}*/
修正:
class MyMathImp1 implements MyMath{
public int sum(int a,int b){
return a + b;
}
public int sub(int a,int b){
return a - b;
}
}
9、当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(重点)
10、面向接口的编程
//多态:父类型引用指向子类型的对象
//调用接口里面的方法(面向接口的编程)
MyMath mm = new MyMathImp1();
mm.sum(10,20);
11、一个类可以实现多个接口
这种机制弥补了java中的一个缺陷:java中的类和类只支持单继承。实际上单继承是为了简单而出现的,现实世界中存在多继承,java中的接口弥补了单继承带来的缺陷。
12、继承和实现同时存在(extends和implements)
extends
关键字在前 ,implements
关键字在后。
public class Test()
{
public static void main(String[] args){
Flyable f = new cat();//多态
f.fly();//输出结果:***
}
class Animal{
}
interface Flyable{
void fly();
}
class Cat extends Animal implements Flyable{
public void fly(){
System.out.println("***")
}
}
13、使用接口写代码时,可以使用多态(父类型引用指向子类型对象)
二、接口在开发中的作用(解耦合)
注意:接口在开发中的作用,类似于多态在开发中的作用。
多态:面向抽象编程,不要面向具体编程。降低程序的耦合度,提高程序的扩展力。
接口是不是完全的?
是的,而我们以后正好要求面向抽象编程。
面向抽象编程这句话以后可以修改为:面向接口编程。有了接口就有了可插拨。可插拔表示扩展力很强。不是焊接死的。
面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
接口的使用离不开多态机制。(接口+多态才可以达到降低耦合度)
接口可以解耦合,解开的是调用者和实现者的耦合,
任何接口都有调用者和实现者。
- 调用者面向接口调用。
- 实现者面向接口编写实现。