在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法。接口类只能定义方法名,返回类型和参数列表,不能有方法体
但是从Java 8、9 开始,Interface 接口中允许定义静态方法、默认方法、私有方法和私有静态方法。下面我们就来为大家介绍其语法规则
JDK1.8中使用两个新概念扩展了接口的含义:默认方法和静态方法,也就是说接口中可以有方法的具体实现
静态方法——static
interface CallPhone{
static void pricePhone(){
System.out.println("每分钟五毛钱");
}
}
public class JieKou {
public static void main(String[] args) {
CallPhone.pricePhone();
}
}
使用static修饰的方法,在使用调用时通过"接口名.方法名"调用,static修饰的方法不能被重写,只能调用,咱们继续往下看
2.默认方法——default
public class JieKou {
public static void main(String[] args) {
XiaoMi mp=new XiaoMi();
mp.call();
mp.typePhone();
}
}
interface CallPhone{
static void pricePhone(){
System.out.println("每分钟五毛钱");
}
default void call(){
System.out.println("我在打电话");
}
}
class XiaoMi implements CallPhone {
public void typePhone(){
System.out.println("小米手机");
}
public void call(){//可以重写,但是需要去掉default
CallPhone.pricePhone();//不能重写,只能调用
System.out.println("我准备打个电话");//call方法重写后的输出语句
CallPhone.super.call();//调用上级接口的方法
}
}
通过类实现接口,default修饰的方法可以被重写,只不过在重写方法时,default修饰符不可再修饰重写的方法。
想在类中调用接口的默认方法只需要"类名.super.方法名"
3.私有方法——private
private修饰方法时,私有方法只能被接口中的默认方法调用
private+static修饰方法时 私有静态方法可以被接口中的默认方法和静态方法调用
private修饰方法时,此方法不能被abstract修饰
public interface JieK {
public abstract void abstractMethod();
public default void defaultMethod() {
privateMethod(); //可以调用接口中的私有方法
privateStaticMethod(); //可以调用接口中的私有静态方法
System.out.println("普通方法被调用");
}
public static void staticMethod() {
privateStaticMethod(); //public静态方法可以调用private静态方法
System.out.println("静态方法被调用");
}
private void privateMethod() {
System.out.println("private私有方法被调用");
}
private static void privateStaticMethod() {
System.out.println("private私有静态方法被调用");
}
}
综上,只有默认方法和抽象方法可以被重写,static和private修饰的方法需要被调用,且private只能被接口里的默认方法和静态方法调用