接口新特性
接口组成更新概述
接口的组成
- 常量
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();}
}
执行结果
gitee源码
git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git