在传统的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只能被接口里的默认方法和静态方法调用