关于Java中的顶层类修饰问题
Java 顶层类修饰问题
对于这个问题,一直没有仔细思考
今天整理一下
对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。
如果类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。
上面这些都是平时使用司空见惯的
但是为什么是这种情况呢?
可以想一下,一个java项目是不可能在一个class里面完成的。mvc模式中,是把类分为三层,一层层调用类。如果定义为私有的和受保护的就无法调用。
换句话说,对于一个java文件,要么就是自己单独运行,要么就是被其他程序作为库调用,如果一个java文件的类被private修饰,那么是不是其他的程序或是类是无法使用它的,那么他作为一个单独的文件就没啥用了。
如果它作为单个文件运行,类加载怎么找到它呢,因为它对外不可见。同时,也失去了类的存在意义。因此,类只有public和默认修饰符。
private不能用于修饰顶层类
原因
对于顶层类(外部类)来说,只有两种修饰符:public和默认(default)。
因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。
因此,只需要两种控制权限:包控制权限和公开访问权限,
也就对应两种控制修饰符:public和默认(default)。
但是private可以修饰class的,只不过该类不能使顶层类,
可以是内部类 内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。
当一个内部类使用了private修饰后,只能在该类的外部类内部使用
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题
对于Nacos,如果需要开启权限控制,可以在 Nacos 控制台上进行配置,本文主要介绍了SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题,感兴趣的可以了解一下2023-10-10Java中使用Thread类和Runnable接口实现多线程的区别
这篇文章主要介绍了使用Thread类和Runnable接口实现多线程的区别,本文给大家介绍了两种实现方式的步骤,除了以上两种多线程实现方式,还可以使用 Callable 接口实现,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下2022-07-07
最新评论