定义:
接口:就是一种公共的规范标准。只要符合规范标准,就可以通用。
以生活中的接口举例:
- 电源插座接口
- USB接口
格式:
package com.zhuhuix.startup.test;
/**
* 格式:public interface 接口名称{
* //接口内容
* }
*
* 如果是java 7 ,接口中可以包含的内容有:
* 1、常量
* 2、抽象方法
*
* 如果是java 8 ,还可以额外包含有:
* 3、默认方法
* 4、静态方法
*
* 如果是java 9,还可以额外包含有:
* 5、私有方法
*/
public interface DemoInterface {
//TODO
}
接口中的抽象方法与实现:
接口实现类必须覆盖重写接口中的所有抽象方法。
public interface DemoInterface {
//抽象方法:public abstract两个关键字可以省略
public abstract void method1();
//抽象方法
void method2();
}
package com.zhuhuix.startup.test;
/**
* 接口不能直接使用,必须有一个实现类来实现该接口
* 格式:
* public class 实现类名称 implements 接口名称{
* //....
* }
*/
public class DemoInterfaceImpl implements DemoInterface{
@Override
public void method1() {
System.out.println("这是接口DEMO中的第一个实现方法");
}
@Override
public void method2() {
System.out.println("这是接口DEMO中的第二个实现方法");
}
}
接口中的默认方法:
接口中的默认方法,可以直接调用,也可以被接口的实现类覆盖重写
package com.zhuhuix.startup.test;
/**
* 接口默认方法可以解决接口升级的问题
* 格式:
* public default 返回值类型 方法名称(参数){
* //...
* }
*/
public interface DemoInterfaceDefault{
//抽象方法
void method();
//默认方法
default void methodDefault(){
System.out.println("这是一个默认方法,在接口中新增后不影响原有接口的实现类,但原有的实现类也可以重写默认方法");
}
}
package com.zhuhuix.startup.test;
public class DemoInterfaceDefaultImpl implements DemoInterfaceDefault{
@Override
public void method() {
System.out.println("实现抽象方法");
}
}
接口中的静态方法:
package com.zhuhuix.startup.test;
/**
* 接口静态方法格式:
* public static 返回值类型 方法名称(参数){
* //...
* }
*/
public interface DemoInterfaceStatic {
//静态方法:不能通过接口实现类的对象来调用接口当中的静态方法
//只能通过接口名称,直接调用其中的静态方法
static void method(){
System.out.println("这是一个静态方法");
}
}
接口中的常量:
package com.zhuhuix.startup.test;
/**
* 接口中可以定义常量
* 必须使用public static final三个关键字修饰,且必须进行赋值
* 常量名称用完全大写字母,用下划线进行分隔
* 格式:
* public static final 数据类型 常量名称=值
*/
public interface DemoInterfaceConst {
//常量:public static final可以省略
public static final String INTERFACE_CONST="Const";
}
总结:
- 接口中的成品变量其实就是常量:常量必须进行赋值,而且一旦赋值不能改变;常量名称需完全大写,用下划线进行分隔。
- 接口中最重要的就是抽象方法:实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。
- 从Java 8开始,接口里允许定义默认方法:默认方法也可以被覆盖重写;接口里允许定义静态方法:静态方法应通过接口名称进行调用,不能通过实现类对象调用接口静态方法。
- 从Java 9开始,接口里允许定义默认私有方法或静态私有方法:私有方法只有接口自己才能调用,不能被实现类调用。