接口就是体现规范的,其中用抽象方法定义的一组行为规范,接口是更加彻底的抽象。
接口的定义与特点
接口的格式如下,接口用关键字 interface 来定义
public interface 接口名 {// 常量// 抽象方法}
- Java 8之前接口中只能是抽象方法和常量,没有其他成分了。
- 接口不能实例化。
- 接口中的成员都是 public 修饰的,写不写都是,因为规范的目的是为了公开化。
接口的用法
接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类。
从上面可以看出,接口可以被类单实现,也可以被类多实现。修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {}
注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类。
- 类和类的关系:单继承。
- 类和接口的关系:多实现。
- 接口和接口的关系:多继承,一个接口可以同时继承多个接口。
接口多继承的作用:规范合并,整合多个接口为同一个接口,便于子类实现。
Java 8 版本开始后,Java 只对接口的成员方法进行了新增
- 默认方法:default 修饰,实现类对象调用。
- 静态方法:static 修饰,必须用当前接口名调用(为了多实现)
- 私有方法:private 修饰,Java 9 开始才有的,只能在接口内部被调用。
他们都会默认被 public 修饰。 ```java public interface SportManInter { /**
1、JDK 8开始 :默认方法(实例方法)-- 必须default修饰,默认用public修饰-- 默认方法,接口不能创建对象,这个方法只能过继给了实现类,由实现类的对象调用。
*/ default void run(){
go(); System.out.println("跑的很快~~~");}
/**
2、静态方法 必须使用static修饰,默认用public修饰 -- 接口的静态方法,必须接口名自己调用。*/ static void inAddr(){
System.out.println("我们都在学习Java新增方法的语法,它是Java源码自己会用到的~~~");}
/**
3、私有方法(实例方法) -- JDK 1.9开始才支持的。 -- 必须在接口内部才能被访问*/ private void go(){
System.out.println("开始跑~~~");}
}
class PingPongMan implements SportManInter{ }
class Test{ public static void main(String[] args) { PingPongMan p = new PingPongMan(); p.run();
SportManInter.inAddr();
// PingPongMan.inAddr();
}
接口的注意事项
- 接口不能创建对象
- 一个类实现多个接口,多个接口中有同样的静态方法不冲突。(static 修饰,必须用当前接口名调用)
- 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
- 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可。
- 一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。
