接口就是一种公共的规范标准
public interface 接口名称 {
//接口内容
}
如果是java 7 ,那么可以包含:
1、常量
2、抽象方法
如果是java 8,那么还可以包含:
3、默认方法
4、静态方法
如果是java 9 ,还可以包含:
5、私有方法
public interface Abstract {
public abstract void methodAbs1();
// public abstract 在接口中 都 可以 省略
void methodAbs2();
abstract void methodAbs3();
public void methodAbs4();
}
1.接口不能直接使用,要通过实现类来实现接口。
接口实现类格式:
public class 实现类名称 implements 接口名称 {
//……
}
2.接口实现类必须覆盖重写(实现)接口所有抽象方法。
实现:去掉abstract
,加上方法的大括号
3.创建实现类的对象,进行使用。
接口:
public interface Abstract {
public abstract void methodAbs1();
abstract void methodAbs2();
public void methodAbs3();
void methodAbs4();
}
实现类
public class AbstractImpl implements Abstract { 快捷键:Alt+回车
public void methodAbs1() {
}
public void methodAbs2() {
}
public void methodAbs3() {
}
public void methodAbs4() {
}
}
创建对象:
public class DemoAbstract {
public static void main(String[] args) {
AbstractImpl abs = new AbstractImpl();
abs.methodAbs1();
abs.methodAbs2();
abs.methodAbs3();
abs.methodAbs4();
}
}
备注:可以解决接口升级的问题
public default 返回值类型 方法名称(){
方法体;
}
abstract
,其多个实现类需要再加上对abstract
的重写覆盖。但是,如果在原本的接口中使用default
,则该接口的实现类们中如果没有,可以自动“继承”接口中该新添的方法。接口:
public interface Deflaut {
public abstract void methodAbs();
public default void methodDef(){
System.out.println("默认方法实现");
}
}
实现体:
public class DefaultImpl implements Deflaut {
@Override
public void methodAbs() {
System.out.println("抽象方法实现");
}
}
对象:
public class DemoDefluat {
public static void main(String[] args) {
DefaultImpl def = new DefaultImpl();
def.methodAbs();
def.methodDef(); //直接继承
}
}
备注:
1.接口默认方法,可以通过实现类,直接调用
2.接口默认方法,可以通过实现类,覆盖重写
public static 返回值类型 方法名称(参数列表){
方法体;
}
default
不同,接口static
方法体的内容,不能,被实现类,直接调用static
方法体的内容,直接通过接口名称调用public interface Static {
public static void methodStatic(){
System.out.println("接口默认方法");
}
}
public class DemoStatic {
public static void main(String[] args) {
Static.methodStatic();
}
}
使用情况:我们需要抽取一个共有的方法,用来解决两个默认方法之间的重复代码,但是,这个共有方法不应该让实现类使用,是私有的。
1.普通私有方法
private 返回值类型 方法名称(参数列表){
方法体;
}
2.静态私有方法
private static 返回值类型 方法名称(参数列表){
方法体;
}
public interface Private {
public default void def1() {
System.out.println("111");
pri1();
}
public default void def2() {
System.out.println("222");
pri1()
}
}
//普通私有方法
private void pri1(){
System.out.println("AAA");
}
}
public interface Private {
public static void def3(){
System.out.println("333");
pri2();
}
public static void def4(){
System.out.println("444");
pri2();
}
//静态私有方法
private static void pri2(){
System.out.println("BBB");
}
}
public static final 数据类型 常量名称 = 数据值 ;
public interface Private {
public static final int NUM = 10 ;
}
static
修饰,所以直接通过接口名调用public interface Private {
public static final int NUM = 10 ;
}
public class DemoStatic {
public static void main(String[] args) {
System.out.println(Private.NUM);
}
}