文章目录
- 一、接口概述
- 二、接口的基本使用
- 三、接口从 JDK 8 开始新增的方法
- 四、接口的注意事项(了解)
- 补充:接口与接口的关系
一、接口概述
规范的基本特征是约束和公开。
接口就是一种规范,其约束别人必须干什么事情。
所以:接口中的抽象方法,默认会自动加上 public abstract
修饰,不写也有。
所以:接口中的常量,默认加上 public static final
修饰,不写也有。
接口的格式如下:
注: JDK8 之前接口中只能是抽象方法和常量,没有其他成分;接口不能实例化。
二、接口的基本使用
接口是用来被类实现 implements
的,实现接口的类称为实现类。 一个类可以实现多个接口。
注意: 一个类实现多个接口,必须重写完全部接口的全部抽象方法,否则这个类必须成为抽象类。
三、接口从 JDK 8 开始新增的方法
接口从 JDK 8 开始新增了 3 个方法,新增三种方法给Java自己用的,为了方便项目维护。
我们只需要知道有这三种方法,并且明白特点会访问即可。
public interface SportMan {
/**
* 1、默认方法。
* JDK8开始;
* 必须使用 default 修饰,默认用 public 修饰;
* 默认方法,接口不能创建对象,这个方法只能过继给实现类,由实现类的对象调用。
*/
default void run(){
System.out.println("跑的很快");
go();
}
/**
* 2、静态方法
* 必须使用 static 修饰,默认用 public 修饰;
* 接口的静态方法,必须使用接口名调用。
*/
public static void inAddr(){
System.out.println("java新语法");
}
/**
* 3、私有方法(实例方法,对象触发)
* JDK 1.9开始才支持的。必须在接口内部才能访向
*/
private void go(){
System.out.println("开始走");
}
}
class PingPongMan implements SportMan{
public static void main(String[] args) {
PingPongMan man = new PingPongMan();
man.run(); // 跑的很快 \n 开始走
SportMan.inAddr(); // java新语法
}
}
四、接口的注意事项(了解)
-
接口不能创建对象。(更加彻底的抽象)
-
一个类实现多个接口,多个接口的规范不能冲突。(如:不同的返回值类型的同名方法,会导致规范冲突)
-
一个类实现多个接口,多个接口中有同样的静态方法不冲突。(因为使用接口名调用)
-
一个类实现多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。( 或者使用 接口名.super.方法名() )
interface AA{ default void go(){ System.out.println("AA"); } } interface BB{ default void go(){ System.out.println("BB"); } } class CC implements AA, BB{ @Override public void go() { AA.super.go(); // 调用 AA 接口的默认方法 //System.out.println("重写的go"); } }
-
一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法(接口中是默认方法),默认用父类的。
interface Food{ default void eat(){ System.out.println("接口中的eat方法"); } } class Animal { public void eat(){ System.out.println("父类中的eat方法"); } } class Cat extends Animal implements Food{ }
public class Test { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); // 父类中的eat方法 } }
-
一个接口继承多个接口,多个接口中存在规范冲突则不能多继承。
补充:接口与接口的关系
类与类:单继承,一个类只能继承一个直接父类。
类与接口:多实现,一个类可以实现多个接口
接口与接口:多继承,一个接口可以继承多个接口。这样可以合并多个接口。
文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)