李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
类和接口的嵌套(一)
Leefs
2019-10-24 PM
1714℃
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
43
标签云
nginx
Golang基础
CentOS
SQL练习题
Kafka
工具
散列
Scala
HDFS
SpringBoot
递归
Python
正则表达式
Spark Core
链表
Kibana
持有对象
数据结构和算法
锁
Golang
DataX
GET和POST
SpringCloudAlibaba
人工智能
随笔
Beego
Jenkins
Azkaban
JavaScript
稀疏数组
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞