复习考试过程中,发现了java的接口中可以存在private static方法。
Java中的接口由两个作用:
1.定义函数声明,供继承的子类实现;
2.定义通用的静态方法原型,供外部调用。
我们知道,只有public修饰的非static方法可以被非同一个package内的类重写,
所以接口中所有非static方法都必须被public修饰。
而static方法只能被隐式继承,不能被重写,所以可以不用public修饰。
经过实验发现,java的接口中可以存在private static方法。
这个方法不能被外部调用,但可以作为接口内部的工具方法使用。
例如接口内其他public static 方法可以调用该private static方法来作为工具函数,
采用private约束可以保证这个工具方法不暴露给外界。
扩展:可以使用protected修饰接口内的静态方法吗?
不可以。
上文提到,private修饰符实现了接口内工具函数的功能,而protected修饰的静态方法:
1.作为工具方法可以让同一个package的所有类使用,存在表示泄露;
2.作为供外界调用的方法,和非静态方法的protected关键字一样,仅在package内部可调用。
所以protected关键字在接口中不能修饰静态方法。
题外话
最后,java接口中,和抽象类中的抽象方法,所有缺省的作用域修饰符都是public,
实现类和抽象类非抽象方法缺省的修饰符都是protected。