Java的外部类为什么不能使用private和protected进行修饰的讲解

作者:Kikityer 时间:2023-06-29 00:45:57 

Java的外部类为什么不能使用private和protected进行修饰

对于这个问题,一直没有仔细思考,今天整理一下:

对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。

如果类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。

上面这些都是平时使用司空见惯的,但是为什么是这种情况呢?

可以想一下,一个java项目是不可能在一个class里面完成的。mvc模式中,是把类分为三层,一层层调用类。如果定义为私有的和受保护的就无法调用。换句话说,对于一个java文件,要么就是自己单独运行,要么就是被其他程序作为库调用,如果一个java文件的类被private修饰,那么是不是其他的程序或是类是无法使用它的,那么他作为一个单独的文件就没啥用了。如果它作为单个文件运行,类加载怎么找到它呢,因为它对外不可见。同时,也失去了类的存在意义。因此,类只有public和默认修饰符。

小结

1.类指外部类,最大的类,修饰符有public(表示该类在项目所有类中可以被导入),default(该类只能在同一个package中使用),abstract,final

2.内部类指位于类内部但不包括位于块、构造器、方法内,且有名称的类,修饰符有public,private,protected访问控制符,也可以用static,final关键字修饰,public和private比较简单,一个表示所有可以被所有类访问,一个表示只能被自身访问,protected修饰的成员类可以被同一个包中的类和子类访问。而default修饰的成员类只能被同一个包中的类访问。

3.局部内部类指位于块、构造器、方法内的有名称类,最多只能有final修饰

来源:https://blog.csdn.net/weixin_40581455/article/details/84134929

标签:java,外部类,修饰符
0
投稿

猜你喜欢

  • Unity命令行打包WebGL的示例代码

    2023-02-02 10:05:13
  • Maven学习----Maven安装与环境变量配置教程

    2021-12-04 08:20:25
  • WPF实现文字粒子闪烁动画效果

    2022-01-12 23:56:45
  • C#中Razor模板引擎简单使用

    2022-01-21 10:04:13
  • MyBatis如何调用存储过程与存储函数

    2023-06-14 16:10:51
  • C#中ManualResetEvent用法总结

    2023-01-21 23:41:41
  • 浅谈c++性能测试工具之计算时间复杂度

    2023-07-09 12:40:05
  • Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    2021-09-12 01:04:16
  • Android自定义短信验证码组件

    2022-10-06 00:30:13
  • Spring Security基于散列加密方案实现自动登录功能

    2022-09-19 01:10:22
  • C#冒泡法排序算法实例分析

    2023-08-13 18:03:42
  • C# 获取客户端IPv4地址的示例代码

    2022-09-12 12:39:34
  • 关于mybatis resulttype 返回值异常的问题

    2021-08-09 20:26:19
  • Java多文件以ZIP压缩包导出的实现方法

    2023-10-08 14:05:20
  • unity 文件流读取图片与www读取图片的区别介绍

    2023-08-30 09:10:37
  • Java实现贪吃蛇大作战小游戏的示例代码

    2023-09-25 21:16:15
  • 浅谈JAVA实现选择排序,插入排序,冒泡排序,以及两个有序数组的合并

    2023-11-20 09:26:40
  • Maven中利用assembly插件打包jar包

    2022-07-09 04:32:14
  • 浅谈Java数值类型的转换与强制转换

    2022-07-01 15:24:00
  • 聊聊Redis的单线程模型

    2022-02-21 09:20:42
  • asp之家 软件编程 m.aspxhome.com