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

首先先我们来了解下Java中的权限修饰符。

Java 权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。

public protected (default) private
同一类中
同一包中(子类与无关类)
不同包的子类
不同包中的无关类

可见,他们之间的大小关系为:

public > protected > (default) > private

注意事项:(default) 并不是关键字“default”,而是默认不写。

那下面进入本篇文章的正题。

1. Java外部类为什么不能用private修饰?

那我们先做一个假设,假如外部类可以被private修饰,那么这个类是私有的,就不能被任何其它类使用,也就成为独立的文件,如果它作为单个文件运行,类加载怎么找到它呢,因为它对外不可见。同时,也失去了类的存在意义。因此外部类不能用private修饰。

2. Java外部类为什么不能用protected修饰?

讨论这个问题之前,我们先强调一下protected(default)修饰符之间的访问权限有什么不同。

protected:同一类中、同一包中、不同包的子类

(default):同一类中、同一包中。

可以看出不同点就在于protected(default)多一个不同包的子类这么一个权限。

那我们还是来做一个假设,假如外部类可以被protected修饰,那么不同包下的其他类是访问不到这个类的。有人说让他们建立父子类关系不就可以访问了吗,错!!!访问都访问不了你如何建立他们之间的父子类关系啊,你说对不对。

其次,你会发现不同包下的其他类是访问不到这个类的,那不就是(default)修饰符的访问权限吗,功能都重复了!!!是不是毫无意义啊,所以外部类不能用protected修饰。

总结

  1. protected修饰的外部类之间是不能建立父子类关系的。
  2. protecteddefault修饰的外部类其访问权限完全相同。
发布了71 篇原创文章 · 获赞 57 · 访问量 2829

猜你喜欢

转载自blog.csdn.net/qq_46018521/article/details/105244763