Java内部类是什么?

在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。

内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外部类的所有元素的访问权限。

内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点。

在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套类,相对而言,类 A 就是外部类。如果有多层嵌套,例如类 A 中有内部类 B,而类 B 中还有内部类 C,那么通常将最外层的类称为顶层类(或者顶级类)。

内部类也可以分为多种形式,与变量非常类似,如下图所示。
在这里插入图片描述

内部类的特点如下:

1 . 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

2 . 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为 private 的。

3 . 内部类声明成静态的,就不能随便访问外部类的成员变量,仍然是只能访问外部类的静态成员变量。

示例内部类的使用。

public class Test {public class InnerClass {public int getSum(int x,int y) {return x + y;}}public static void main(String[] args) {Test.InnerClass ti = new Test().new InnerClass();int i = ti.getSum(2/3);System.out.println(i);    // 输出5}
}

有关内部类的说明有如下几点。

1 . 外部类只有两种访问级别:public 和默认;内部类则有 4 种访问级别:public、protected、 private 和默认。

2 . 在外部类中可以直接通过内部类的类名访问内部类。

InnerClass ic = new InnerClass();    // InnerClass为内部类的类名

3 . 在外部类以外的其他类中则需要通过内部类的完整类名访问内部类。

Test.InnerClass ti = newTest().new InnerClass();    // Test.innerClass是内部类的完整类名

4 . 内部类与外部类不能重名。

注意:内部类的很多访问规则可以参考变量和方法。另外使用内部类可以使程序结构变得紧凑,但是却在一定程度上破坏了 Java 面向对象的思想。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 删除表记录的 存储过程命令_用SQL语句删除一个数据库的所有表和所有存储过程...

如果数据库里有很多表和存储过程,要用手动鼠标右键一个个删除是很麻烦的,用SQL语句来删除就方便很多了删除所有的表:如果由于外键约束删除table失败,则先删除所有约束:--/第1步**********删除所有表的外键约束********…

有意思的编程面试问题

第一:有12个外观完全一样的球;   第二:11个是好球,重量相同;   第三:有一个球是“坏球”,重量与其他11个球异常,但不知偏轻偏重!   第四:有一架天平&am…

MOOC-人工智能实践:Tensorflow笔记4.2自制数据集txt文件和数据集不匹配解决办法(读取文件名并提取内容并合并原始内容与提取内容)

1、读取文件名称生成txt文件 # P01 批量读取文件名,并将读取的文件名保存到指定路径下的txt中(带.*** 后缀)import os def ListFilesToTxt(dir, file, wildcard, recursion):exts wildcard.split(" ")files os.listdir(dir)for …

file数组 删除文件_java编程IO基础之一:File类

在整个java.io包中,File类是唯一的一个与文件本身操作有关的类,既可以执行文件的创建、删除、重命名,取得文件大小和修改日期。File的构造函数:public File(String pathname) 给定一个要操作文件的完整路径。public File(File par…

Java实例内部类

实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下: public class Outer {class Inner {// 实例内部类} }上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1 . 在外部类的静态方法和外部类以外的其他…

mysql table fetching_MySQL死锁分析一例

Tomcat日志报死锁错误,show innodb status获取死锁信息:------------------------LATEST DETECTED DEADLOCK------------------------181107 9:30:46*** (1) TRANSACTION:TRANSACTION 2067C318, ACTIVE 16 sec fetching rowsmysql tables in use 1, lock…

excel工具箱_WPS搬来救兵智能工具箱,强大到Excel没有还手之力

EXCEL不加班眼见Excel连胜2局,WPS慌了,搬来救兵智能工具箱,这个神器,所到之处,问题瞬间解决。这智能工具箱究竟是何方宝物,强大到Excel没有还手之力!Excel2016的闪电填充确实牛逼,不…

目标检测初始准备环节-安装包所需镜像源网址(以Labelimg为例)

目标检测安装labelimg对自己的数据集进行标记(windows系统) pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple镜像源可以替换为: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://m…

mysql cve 2016 3521_MySQL-based databases CVE -2016-6663 本地提权

date: 2016/11/3author: dlive0x01 漏洞原文翻译水平不高求轻喷感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程0x04漏洞利用过程总结给出了清晰的漏洞利用过程,结合poc食用效果更佳# http://legalhackers.com…

Java静态内部类

静态内部类是指使用 static 修饰的内部类。示例代码如下: public class Outer {static class Inner {// 静态内部类} }上述示例中的 Inner 类就是静态内部类。静态内部类有如下特点。 1 . 在创建静态内部类的实例时,不需要创建外部类的实例。 public …

oracle em界面监控出来的奇怪图像_海康poe主机断电重启后不出图像,显示用户被锁定...

海康poe主机断电重启后不出图像,显示用户被锁定前段时间给客户装了一套海康poe主机的监控系统,摄像头也是海康的130万的poe摄像头,客户突然打电话来说,断电重启后监控图像不出来了,我很奇怪,海康的监控系统也做过很多&…

论文图标visio等字体对应

八号=5磅(5pt) (5/72)*966.67 6px 七号=5.5磅 (5.5/72)*967.3 7px 小六=6.5磅 (6.5/72)*968.67 8px 六号=7.5磅 (7.5/72)*9610px 小五=9磅 (9/72)*9612px 号=10.5磅 (10.5/72)*9614px 小四=12磅…

harbor重置mysql密码_Harbor密码重置 密码修改 admin密码重置

Harbor密码重置harbor现在是使用postgresql 数据库了。不再支持mysql,网上有N多重置Mysql密码的,可以略过了。我密码错了默认的Harbor12345 修改为: RedHat12345 然后忘记密码死活登陆不上。卸载重新重新安装也不可以,原因是没有删…

Java局部内部类

局部内部类是指在一个方法中定义的内部类。示例代码如下: public class Test {public void method() {class Inner {// 局部内部类}} }局部内部类有如下特点: 1 . 局部内部类与局部变量一样,不能使用访问控制修饰符(public、pri…

mysql 数据迁移_CentOS7迁移Mysql数据库文件

1、查看Mysql安装路径cat /etc/my.cnf2、查看数据盘路径df3、数据盘下创建mysql数据目录,设置目录磁盘写入权限cd /mnt1/xfrb_database/mkdir mysqlchmod -R 777 /mnt1/xfrb_database/mysql/ls -l -a目录创建和权限设置成功。4、停止Mysql服务,拷贝Mysql…

mysql json类型最大长度限制_MySQL json 数据类型

必须要5.7以上版本才能使用 写在开头 mysql json 的功能很强大,只是用来当一个储存数据的字段 就没什么意义了。 使用proto做交互的话,只要JSON 写得好 用proro.Unmarshal() 就可以很方便的转换类型 可以精简很多代码 JSON path 是以 $ 开头,之后就是JSON的层级使用。$ $[0]…

火狐浏览器title过长显示不全_浏览器渲染

简述浏览器的内核是指支持浏览器运行的最核心的程序,分为两个部分的,一是渲染引擎,另一个是JS引擎。渲染引擎在不同的浏览器中也不是都相同的。目前市面上常见的浏览器内核可以分为这四种:Trident(IE)、Gec…

mysql建表指定引擎_请教mysql建表指定data directory 报错

--如下:语句1... create table test(id int) enginemyisam data directory/tmp index directory/tmp/abc;在目录/tmp /tmp/abc 可以执行成功[mysqllocalhost tmp]$ pwd/tmpdrwxrwxr-x 2 mysql mysql 4096 Mar 30 14:37 abcmysql> create table test(id int) enginemyisam d…

查看目录是否为内存盘_Linux buff/cache内存释放

free 命令 产看内存占用一览:free 参数:今天部署项目的时候,发现pm2命令卡顿不能正确执行,一开始以为是pm2版本的问题,后面升级pm2到最新版本也没有解决问题。既然和pm2本身没有关系,那么就从其它地方检查&…

java用内部类实现多重继承

最常见的实现多重继承的方式,是implements interface1,interface2,interface3… 也可以通过多个内部类extends多个抽象类。 示例如下 public class Father {public int strong(){return 9;} }public class Mother {public int kind(){return 8;} }public class S…