接口新特性
接口组成更新概述
接口的组成
- 常量
public static final String ZERO = "0";
- 抽象方法
public abstract void dance();
- 默认方法(JAVA8新增)
public default void dance(){}
- 静态方法(JAVA8新增)
public static void dance(){}
- 私有方法(JAVA9新增)
private void dance(){}
private static void dance(){}
注意事项:
JAVA8之后在接口中新增了默认方法、静态方法、私有方法(JAVA9)。
接口中允许有方法体的只有以上四种。其中public void dance(){} / protected void dance(){} 是不允许的
接口中默认方法
格式:
public default 返回值类型 方法名(参数列表){}
示例:
public default void eat(){}
注意事项:
默认方法不是抽象方法,所以不强制被重写,但可以被重写,重写的时候去掉default关键字
public可以省略,default不能省略
案例:
Eatable.java
package demo1;
public interface Eatable {
default void eat(){
System.out.println("Eatable中eat方法被调用");
}
}
EatImpl.java
package demo1;
public class EatImpl implements Eatable {
}
InterfaceDemo1.java
package demo1;
public class InterfaceDemo1 {
public static void main(String[] args) {
Eatable eatable = new EatImpl();
eatable.eat();
}
}
执行结果
接口中静态方法
格式:
public static 返回值类型 方法名(参数列表){}
示例:
public static void eat(){}
注意事项:
静态方法只能通过接口名称调用,不能通过实现类名或对象名调用
public可以省略,static不能省略
案例:
Eatable.java
package demo2;
public interface Eatable {
static void eat(){
System.out.println("Eatable中静态的eat方法被调用");
}
}
InterfaceDemo2.java
package demo2;
public class InterfaceDemo2 {
public static void main(String[] args) {
Eatable.eat();
}
}
执行结果
接口中私有方法
格式1:
private 返回值类型 方法名(参数列表){}
格式2:
private static 返回值类型 方法名(参数列表){}
示例:
private void eat(){}
private static void eat2(){}
注意事项:
默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法
案例:
Eatable.java
package demo3;
public interface Eatable {
default void eat(){
System.out.println("Eatable中的default方法被调用");
eat1();
eat2();
}
private void eat1(){System.out.println("Eatable中的private方法被调用");}
private static void eat2(){System.out.println("Eatable中的静态private方法被调用");}
}
EatableImpl.java
package demo3;
public class EatableImpl implements Eatable{
}
InterfaceDemo3.java
package demo3;
public class InterfaceDemo3 {
public static void main(String[] args) {
Eatable eatable = new EatableImpl();
eatable.eat();
}
}
执行结果