Java回顾:接口和抽象类修饰词问题

一、修饰词的访问范围

访问修饰符同一个类同一个包中的子类同一个包中的非子类不同包中的子类不同包中的非子类
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的“对象”

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值