1、接口的基础语法
1)接口是一种引用数据类型
——编译后产生class字节码文件
2)接口是完全抽象
的,或者叫特殊抽象
3)接口语法:修饰符 interface 接口名{}
public Interface inter01{
//inter01为接口名
}
4)接口中只有常量
和抽象方法
。方法中无方法体
//常量
public static final double C=12.56;
public static final double PI=3.1415926;
//抽象方法
int sum(double a,double b);
double sub(int a,int b);
5)接口支持多重继承
。
public Interface A extends B,C{
}
6)接口中所有的元素都由public
修饰。
修饰常量的public static final 可省略,修饰抽象方法的public abstract 可省略
7)接口可与多态联用
-
a、父类型的引用指向子类型的对象(调用接口中的方法)——面向接口编程
分别创建三个名为A、B、C的接口,创建一个名为D的实现类,创建一个名为Test02的测试类。
在测试类中敲出一下代码:
public static void main(String[] args) { //接口与多态联用 //父类型的引用指向子类型的对象 A a = new D(); B b = new D(); C c = new D(); }
-
b、B b2 = (B)a;经过测试:接口与接口之间在进行强制转换时,没有继承关系可以强转。但在运行时,可能会出现ClassCastException 异常
8)当既有实现又有继承时,先继承后实现
public class Cat extends Animal implements Flyable{
//先继承后实现
}
9)一个类和一个类之间叫继承
extends
一个类和一个接口之间叫实现
implements
一个类(非抽象类)和多个接口之间也叫实现implements
10)当一个非抽象类实现接口的话,必须将接口中的所有抽象方法全部重写
(覆盖、实现)。并且所有实现的抽象方法必须用public 修饰,访问权限更低
public class D implements A,B,C{
//当一个非抽象类实现接口的话,必须将接口中的所有抽象方法全部重写
//D实现类重写接口A、B、C中的方法
@Override
public void aa() {
}
@Override
public void bb() {
System.out.println("bb-------------");
}
@Override
public void cc() {
}
}
11)使用接口写代码时,可以使用多态——即面向接口编程
2、接口在开发中的作用(偏理论理解性)
1)类似于在多态中的作用,接口的使用离不开多态
多态:面向抽象编程,并不面向具体编程。降低程序的耦合度,提高程序的扩展力,符合OCP原则
2)有了接口就有了可插拔
可插拔:是指扩展能力很强,并不是焊接死的
3)任何一个接口都有调用者和实现者
调用者面向接口调用,实现者面向接口编写实现
接口可以将调用者和实现者解耦合
4)之后进行大项目的开发,一般都是将项目分离成一个模块一个模块的
模块与模块之间采用接口衔接,降低程序的耦合度
3、is a、 has a、 like a
的区别
1)is a:
Cat is a Animal. 凡是满足 is a 的表示“继承”关系
2)has a:
She has a pen.凡是满足 has a 的表示“关联”关系
关联关系通常以属性形式存在
3)like a:
Cookers like a Menu.凡是满足 like a 的表示“实现”关系
实现关系通常为类实现接口
4、抽象类和接口
的区别
抽象类:半抽象;抽象类中有构造方法;类与类之间只能单继承,一个抽象类只能继承一个类
接口:完全抽象;接口中没有构造方法;接口与接口之间支持多继承,一个类可以实现多个接口;接口中只允许出现常量和抽象方法
5、接口使用比抽象类多
接口一般是是对行为的抽象