Java外部类为什么不能用protected、private修饰

java只有四种访问控制权限:private、default、protected、public

private:当前类访问权限
default:包访问权限
protected:子类访问权限
public:公共访问权限

外部类为什么不能使用protected、private修饰:

1.不能用private:

对于一个外部类,用private修饰是没有意义的。因为如果使用private修饰外部类,其它类就不能访问的这个类,那么这个类就不能创建实例,这个类的属性和方法就不能被外界访问,所以没有意义。

2.不能用protected:

protected是用来修饰类中的属性和方法的,不是用来修饰类的。假如定义一个A类用protected修饰,再在与A类不同包的另一个保重定义一个B类,B类如果要继承A类,前提是B类能够访问到A类。仔细想想就会发现这是冲突的。(你要成为A类的子类,你的先访问到A类,但你要访问到A类,那你先得成为A类的子类。因为protected修饰的类就是给子类访问的)这个逻辑明显是冲突的。

所以不仅是外部类,普通类也不能用protected修饰。

这时肯定有人会说:把B类放在A类同一个包下,那B类不就可以访问到A类了吗?

但是:如果你把B类放在和A类同一个包下,那和用default修饰A类有什么区别,既然和default没有区别,那干嘛还要用protected修饰A类,而且protected本身可以跳出同一个包访问的意义也不存在了,所以用protected修饰类是没有意义的。

posted @ 2021-04-22 20:17  新设备  阅读(1851)  评论(0编辑  收藏  举报