1 package ClassUnit;
2
3 /**
4 * 可以在类的内部定义另外一个类,这种类就是所谓的嵌套类。嵌套类的作用域被限制在包含它的类之中。
5 * 因此,如果类B是在类A中定义的,那么类B不能独立于类A而存在。嵌套类可以访问包含它的类的成员,
6 * 包括私有成员。但是,包含类(包含嵌套类的类)不能访问嵌套类的成员。嵌套类直接在包含类中作为成员进行声明。 也可以在代码块中声明嵌套类。
7 * 嵌套类最重要的类型是内部类。内部类是非静态的嵌套类, 可以访问外部类的所有变量和方法,并且可以直接引用它们,
8 * 引用方式与外部类的其他非静态成员使用的方式相同。
9 * 嵌套类最重要的类型是内部类。内部类是非静态的嵌套类,可以访问外部类的所有变量和方法,并且可以直接引用它们,引用方式与外部类的其他非静态成员使用的方式相同。
10 * 下面的程序演示了如何定义和使用内部类。其中被命名为Outer 的类有一个名为
11 * out_x的实例变量,一个名为test()的实例方法,并且还定义了一个名为Inner 的内部类:
12 *
13 * @author Admin
14 *
15 */
16 public class Outer {
17 int outer_x = 100;
18
19 void test() {
20 Inner inner = new Inner();
21 inner.display();
22 }
23
24 class Inner {
25 int y = 10;
26
27 void display() {
28 System.out.println("display:outer_x=" + outer_x);
29 }
30 }
31
32 /**
33 * 尽管我们一直主要关注的是,
34 * 在外部类的作用域内作为成员声明的内部类,但是也可以在任何代码块的作用域内定义内部类。例如,可以在由方法定义的代码块中,甚至在
35 * for 循环体内定义嵌套类,如下面这个程序所示:
36 */
37 void innerNewTest() {
38 for (int i = 0; i < 10; i++) {
39 class Inner1 {
40 void display() {
41 System.out.println("Inner1.display:Outer_x=" + outer_x);
42 }
43 }
44
45 Inner1 inner = new Inner1();
46 inner.display();
47 }
48 }
49
50 void showy() {
51 /**
52 * 只能在Outer类的作用域内创建Inner类的实例,认识到这一点很重要。如果试图在Outer类之外的任何代码中实例化Inner类,
53 * Java编译器就会生成错误。一般来说,必须通过封闭的作用域创建内部类的实例,如上面的示例所示。
54 * 正如所解释的,内部类可以访问外部类的所有成员,但是反过来不可以。内部类的成员只有在内部类的作用域内才是已知的,并且外部类不能使用。
55 */
56 // 在此,y被声明为Inner类的实例变量。因此,在Inner类的外部不知道y,并且showy)方法也不能使用它。
57 // System.out.println(y); //error.y not known here !
58 }
59 }
60
61
62
63
64
65
66 package ClassUnit;
67
68 public class InnerClassDemo {
69 public static void main(String[] arg) {
70 /**
71 * 在这个程序中,被命名为Inner的内部类是在Outer类的作用域内定义的。所以,Inner类中的所有代码,都可以直接访问变量 outer_x。在
72 * Inner类中定义了一个名为displayO)的实例方法,该方法在标准输出流上显示 outer_xoInnerClassDemo类的
73 * main()方法创建了 Outer类的一个实例,并调用这个实例的test()方法。该方法创建Inner类的一个实例,并调用display0)方法。
74 */
75 Outer o = new Outer();
76 o.test();
77 o.innerNewTest();
78 /**
79 * ---------输出结果:------------------------------
80 * display:outer_x=100
81 * Inner1.display:Outer_x=100 Inner1.display:Outer_x=100
82 * Inner1.display:Outer_x=100 Inner1.display:Outer_x=100
83 * Inner1.display:Outer_x=100 Inner1.display:Outer_x=100
84 * Inner1.display:Outer_x=100 Inner1.display:Outer_x=100
85 * Inner1.display:Outer_x=100 Inner1.display:Outer_x=100
86 * -----------------------------------------------------
87 * 尽管嵌套类并不是对于所有情况都适用,但是当处理事件时它们特别有用。在弟 24
88 * 章我们会继续讨论这个主题。在那儿将会看到,如何使用内部类简化处理特定类型的事件所需要的代码,还将学习有关匿名内部类的内容,匿名内部类是没有名称的内部类。最后一点:最初的Java
89 * 1.0规范不支持嵌套类。嵌套类这一特性是在Java 1.1规范中引入的。
90 *
91 */
92 }
93 }
94
内部类
原创一品堂_技术学习笔记 ©著作权
©著作权归作者所有:来自51CTO博客作者一品堂_技术学习笔记的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:电子书籍分享
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类
成员内部类 | 静态内部类 | 局部内部类 | 匿名内部类1、成员内部类可以访问外部类的私有成员或属性。当内部类和
java 开发语言 外部类 内部类 私有属性 -
基于springboot的古典舞在线交流平台的设计与实现
本文介绍了一个基于SpringBoot框架开发的古典舞在线交流平台,采用Java技术和MySQL数据库。系统包含用户和管理员两大功能模块:用户可浏览首页、课程、视频、论坛等,需注册登录后才能进行发帖、购买服饰等操作;管理员则拥有全面的后台管理权限,包括用户管理、内容管理等。文章详细说明了系统开发环境、数据库表设计(包含5个主要数据表)以及核心功能模块的实现界面,如用户注册、论坛交流、购物车和管理后台等。该系统具有布局合理、操作简便等特点,为古典舞爱好者提供了便捷的在线交流平台。
#spring boot #后端 #java #数据库 #开发语言
















