关于Java中的顶层类修饰问题

 更新时间:2021年11月03日 09:58:05   作者:sicaujh  
这篇文章主要介绍了关于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开启鉴权解决跳过登录页面问题

    SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题

    对于Nacos,如果需要开启权限控制,可以在 Nacos 控制台上进行配置,本文主要介绍了SpringCloudAlibaba Nacos开启鉴权解决跳过登录页面问题,感兴趣的可以了解一下
    2023-10-10
  • Java中List列表去重有序和无序的6种方法

    Java中List列表去重有序和无序的6种方法

    在日常的业务开发中,会遇到List中的重复数据去除掉的场景,本文就来介绍一下Java中List列表去重有序和无序的6种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • spring设置拦截器代码实例

    spring设置拦截器代码实例

    这篇文章主要介绍了spring设置拦截器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringBoot解决跨域问题小结

    SpringBoot解决跨域问题小结

    在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求,Spring Boot提供了多种方式来处理跨域请求,本文将介绍其中的几种方法,感兴趣的朋友一起看看吧
    2023-12-12
  • 基于Java写minio客户端实现上传下载文件

    基于Java写minio客户端实现上传下载文件

    这篇文章主要介绍了基于Java写minio客户端实现上传下载文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java中使用Thread类和Runnable接口实现多线程的区别

    Java中使用Thread类和Runnable接口实现多线程的区别

    这篇文章主要介绍了使用Thread类和Runnable接口实现多线程的区别,本文给大家介绍了两种实现方式的步骤,除了以上两种多线程实现方式,还可以使用 Callable 接口实现,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Java String类字符串的理解与认知

    Java String类字符串的理解与认知

    String字符串和char字符不同,char使用单引号,只能表示一个字符,字符串就是一段文本。String是个类。这个类使用final修饰,所以这个类是不可以继承扩充和修改它的方法的
    2021-10-10
  • Java实现简单登陆界面

    Java实现简单登陆界面

    这篇文章主要为大家详细介绍了Java实现简单登陆界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • java计算工作时间除去节假日以及双休日

    java计算工作时间除去节假日以及双休日

    这篇文章主要为大家详细介绍了java计算工作时间除去节假日以及双休日的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 通过ibatis解决sql注入问题

    通过ibatis解决sql注入问题

    这篇文章主要介绍了通过ibatis解决sql注入问题,需要的朋友可以参考下
    2017-09-09

最新评论