一、修饰词的访问范围
访问修饰符 同一个类 同一个包中的子类 同一个包中的非子类 不同包中的子类 不同包中的非子类 public✅ ✅ ✅ ✅ ✅ protected✅ ✅ ✅ ✅(通过继承访问) ❌ 默认(包级私有) ✅ ✅ ✅ ❌ ❌ private✅ ❌ ❌ ❌ ❌
二、接口和抽象类的修饰要求
接口的核心作用是定义一个完全抽象的公共契约,所有实现类必须公开实现这些方法。
而抽象类可以定义方法的具体实现
场景 抽象类 接口 顶层声明 可使用 public或包级私有可使用 public或包级私有成员方法 可使用 public/protected/ 默认只能是 public(隐式)抽象方法 可使用 protected(限制子类访问)不能使用
protected
三、接口修饰词乱用会导致什么问题
问题一、为什么接口不能用protected修饰
protected修饰符的语义是:
同一包内的类可以访问。
不同包的子类可以通过继承访问。
然而,接口的设计与
protected存在根本冲突:// 假设语法合法(实际不合法) protected interface Service { void method(); // 必须是public,但接口本身是protected } // 不同包的子类尝试实现 package other; public class MyService implements Service { @Override public void method() { /* 实现 */ } } // 其他包的类无法通过接口引用调用方法 Service s = new MyService(); // 编译错误:无法访问protected接口 //因为其他包无法直接访问这个编译时类型为Service的“对象”
1994

被折叠的 条评论
为什么被折叠?



