接口
类和接口
差异:
类:使用class Java类 是包含属性和方法,有自己的方法体
接口: intreface 是一个引用数据类型 只有方法,没有方法体
同:
都会编译成.class文件
JDK8
此版本以后,可以定义变量(默认为常量)、抽象方法、默认方法、静态方法
接口定义
// 接口定义,使用interface关键字
public interface 接口名{
// 代码块
}
使用接口结构
1.使用关键字 interface 定义一个接口
public interface MyInterface {
}
2.创建实现类,实现接口,重写里面所有的抽象方法
public class MyInterfaceImpl implements MyInterface {
}
3.创建测试类,创建实现类对象,调用实现类重写的方法
public class TestMyInterface {
public static void main(String[] args) {
//创建实现类的对象
MyInterfaceImpl myInterface = new MyInterfaceImpl();
}
}
接口使用规则
创建对象
**不能**直接创建,需要实现类来实现接口
方法:
// 定义一个抽象方法 --> 默认使用public abstract修饰
public abstract void a(); // 目前推荐方式
// protected abstract void b();//错误
public void b();
abstract void c();
void d(); // 后期推荐方式`
接口内的方法的定义,默认都是public修饰,不写的时候,表示public省略,并非是默认权限修饰符
默认方法
- 默认使用public修饰,可以被实现类重写
- 实现类重写缺失了default关键字,不能使用接口名来访问,只能实现类的对象来访问。
- 如果实现类重写了默认方法(没有要求一定要重写),实现类对象访问的默认方法就是自己的
抽象方法
- 接口中的抽象方法,默认使用public abstract修饰,写不写都是他们两个修饰
- 没有方法体
public abstract void a();
静态方法
直接使用==接口名. 静态方法==访问,不能使用接口的实现类对象访问接口的静态访问
myInterface.d();
MyInterface.c();
实现类
- 实现接口使用implements关键字
- 接口可以多实现,但需要重写接口中的所有抽象方法。
- 多个接口存在重名,只需要重写一次即可
- 实现类实现多个接口并继承某个抽象类的时候:
public class MyInterfaceImpl extends Fu implements
MyInterface,MyInterface02 {
}
(1)抽象类的普通方法 和 接口中的默认方法重名,子类(实现类)不重写的话,默认访问的是父类(抽象类)中的普通方法。
(2)需要重写父类和接口中的所有抽象方法他,重名只需要重写一次
变量(常量)
- 接口中的变量(常量)默认被public final static修饰–>接口中的变量就是一个常量且不能二次赋值
- 实现类和接口类的常量相同时,接口名.常量访问 = 接口中的常量,实现类对象.常量 = 实现类的常量(各找各家)
- 实现类没有与接口相同的变量时,可以使用接口名来访问 or 实现类的对象访问。
抽象类和接口的差别
- 静态方法都不能被重写,但 抽象类的静态方法可以使用子类对象来访问,接口只能自己来
- 接口==》默认方法,抽象 ×
- 抽象类==》构造方法,接口 ×
- 抽象类==》普通方法他,接口 ×
- 抽象类==》静态代码块、代码块,接口 ×