You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中接口能否用默认访问修饰符?未指定时是否为public abstract?

Java接口的默认访问修饰符解析

嘿,这个问题问到点子上了,很多刚接触Java接口的开发者都会搞混这两个点,我给你一步步讲清楚:

1. 接口能不能用默认访问修饰符(省略不写)?

当然可以,但得分两种场景:

  • 顶级接口(直接写在.java文件里,不是嵌套在类/其他接口内部的接口):只能用public或者默认访问权限(省略修饰符),默认权限意味着这个接口只能被同一个包下的类访问。
  • 成员接口(嵌套在类或者其他接口里的接口):除了public和默认权限,还能使用protected甚至private(不过private成员接口只能在所属类内部使用,很少见),省略修饰符时同样是默认的包私有权限。

举个例子:

// 顶级接口,默认包私有,只能同包类访问
interface DefaultAccessInterface {
    void doSomething();
}

public class TestClass {
    // 成员接口,默认包私有
    interface InnerDefaultInterface {
        void innerMethod();
    }
}

2. 省略修饰符时,接口是不是默认public abstract?

这里要拆成两部分看:

  • abstract是默认的:不管你显式写不写abstract,所有接口本质上都是抽象的——毕竟接口就是用来被实现的,不能直接实例化,而且接口里的所有抽象方法默认也是public abstract(Java 8及以后的默认方法、静态方法除外)。
  • public不是默认的:如果省略了访问修饰符,接口的访问权限是默认的包私有,而不是public。只有当你显式加上public关键字时,接口才是公共可访问的。

比如这个常见误区:很多人以为顶级接口默认是public,但实际上只有当你显式声明public interface时,它才是公共的,否则只能被同包类访问。

总结一下:

  • 接口可以用默认访问修饰符(省略不写),权限为包私有;
  • 省略修饰符时,接口默认是[默认包私有] abstract,而非public abstract。

内容的提问来源于stack exchange,提问作者rusmusus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:23:45