李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
类和接口的嵌套(一)
Leefs
2019-10-24 PM
2074℃
0条
# 类和接口的嵌套(一) ### 前言 当学习了类和接口之后,不禁有一个疑问,它们之间是否能进行嵌套,如果能,它们之间又是如何进行嵌套的? #### 类和接口的嵌套方式 **类:class** **接口:Interface** 方式1:**类嵌套类** 方式2:**类嵌套接口** 方式3:**接口嵌套类** 方式4:**接口嵌套接口** ### 一、类嵌套类 背景:大自然中动物多种多样,有猫、狗、狮子、大象,对于同一种动物,又可以分为不同的品种 > 代码 ```java class Animal{ class Dog{ } static class Cat{ } } ``` #### 1.嵌套类的概念 在Java语言中允许在一个类中在定义一个类,这样的类被称为嵌套类,其中包含嵌套类的类被称为外部类或封闭类。 上方代码中Animal称为外部类,Dog和Cat称为内部类。 #### 2.嵌套类的分类 + **1.静态嵌套类(Static nested classes):**使用==static==声明,一般称为嵌套类( Nested Classes )。 + **2.非静态嵌套类( Non-static Nested Classes ):**非==static==声明,一般称为内部类( Inner Classes )。 上方代码中Dog是非静态嵌套类,Cat是静态嵌套类。静态嵌套类就是在类名前面加上static关键字。 非静态嵌套类又叫内部类(内部类是嵌套类的子集)。 ##### 非静态嵌套类(内部类)分类: + 1.成员内部类(Member inner class) + 2.匿名内部类(Anonymous inner class) + 3.局部内部类(Local inner class) | 类型 | 描述 | | ---------- | -------------------------------------------------- | | 成员内部类 | 在类中和方法外部创建的类 | | 匿名内部类 | 为实现接口或扩展类而创建的类,它的名称由编译器决定 | | 局部内部类 | 在方法内部创建的类 | | 静态嵌套类 | 在类中创建的静态类 | ![非静态内部类.jpg][1] 嵌套类的关系图解 图片来源于网络 #### 3.嵌套类的使用规则 **嵌套类**是它的外部类的成员,非静态嵌套类(内部类)可以访问外部类的其他成员,即使该成员是私有的。而静态嵌套类只能访问外部类的静态成员。 **嵌套类**作为外部类的一个成员,可以被声明为:`private`,`public`,`protected`或者包范围(注意:外部类只能被声明为`public`或者包范围)。 #### 4.嵌套类的优点 1. 1.嵌套类可以访问外部类的所有数据成员和方法,即使它是私有的。 2. 2.提高可读性和可维护性:因为如果一个类只对另外一个类可用,那么将它们放在一起,这更便于理解和维护。 3. 3.提高封装性:给定两个类A和B,如果需要访问A类中的私有成员,则可以将B类封装在A类中,这样不仅可以使得B类可以访问A类中的私有成员,并且可以在外部隐藏B类本身。 4. 4.减少代码的编写量。 #### 5. 5.嵌套类的类型调用 #### 静态嵌套类: > 代码 ```java class Animal { //外部类和静态数据成员 static String typeCat = "加菲猫"; //外部类的静态嵌套类 static class Cat { // 静态嵌套类中的实例方法 void getCat() { System.out.println("Cat type is "+typeCat); } } public static void main(String[] args) { // 实例化静态嵌套类(创建对象) Animal.Cat obj = new Animal.Cat(); obj.getCat(); } } ``` > 运行结果 ```java Cat type is 加菲猫 ``` > 代码分析 + 1.创建一个外部类Animal在类中嵌套一个静态类Cat(外部类的静态嵌套类) + 2.在外部类Animal中定义一个静态数据成员**typeCat** + 3.在内部静态类Cat中定义一个getCat()方法,调用typeCat + 4.在主函数中创建Cat对象,并调用其中的getCat()方法 **使用静态嵌套类的静态方法示例** : ```java class Animal { //外部类和静态数据成员 static String typeCat = "加菲猫"; //外部类的静态嵌套类 static class Cat { // 静态嵌套类中的实例方法 static void getCat() { System.out.println("Cat type is "+typeCat); } } public static void main(String[] args) { // 实例化静态嵌套类(创建对象) //Animal.Cat obj = new Animal.Cat(); Animal.Cat.getCat(); } } ``` > 运行结果 ```java Cat type is 加菲猫 ``` **当静态嵌套类中有静态成员,则不需要实例化静态嵌套类即可直接访问 。** #### 总结 1. 1.静态嵌套类是外部类的静态成员,它可以直接使用`外部类名.静态嵌套类名`访问自身 。 2. 2.它可以访问外部类的静态成员和静态私有成员。 3. 3.与其他类一样,静态嵌套类不能访问非静态成员。 附:[参考原文连接][2] [1]: https://lilinchao.com/usr/uploads/2019/10/4086388070.jpg [2]: https://www.cnblogs.com/nwgdk/p/8661442.html
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/55.html
上一篇
再论适配器设计模式
下一篇
类和接口的嵌套(二) -- 非静态嵌套类
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Java阻塞队列
Ubuntu
人工智能
ajax
Hadoop
并发编程
Flume
Quartz
哈希表
稀疏数组
DataWarehouse
Elastisearch
Elasticsearch
Sentinel
Redis
FileBeat
机器学习
JavaSE
Tomcat
Netty
Eclipse
SQL练习题
Spark SQL
HDFS
JavaScript
Golang
Hive
MyBatis
DataX
pytorch
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭