java嵌套类(nested classes)总结

上传人:第*** 文档编号:34041777 上传时间:2018-02-20 格式:DOC 页数:14 大小:231KB
返回 下载 相关 举报
java嵌套类(nested classes)总结_第1页
第1页 / 共14页
java嵌套类(nested classes)总结_第2页
第2页 / 共14页
java嵌套类(nested classes)总结_第3页
第3页 / 共14页
java嵌套类(nested classes)总结_第4页
第4页 / 共14页
java嵌套类(nested classes)总结_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《java嵌套类(nested classes)总结》由会员分享,可在线阅读,更多相关《java嵌套类(nested classes)总结(14页珍藏版)》请在金锄头文库上搜索。

1、java 嵌套类(Nested Classes)总结Nested Classes 定义在 java 语言规范里面,嵌套类 (Nested Classes)定义是:A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class. 说的简单一点,就是定义在类里面的类。一般把定义内部类的外围类成为包装类(enclosing class)或者外部类嵌套类分类

2、根据 nested class 定义的地方,可以分为 member nested class,local nested class , anonymous nested classmember nested class(成员嵌套类) :成员嵌套类 作为 enclosing class 的成员定义的,成员嵌套类有 enclosing class 属性local nested class (局部嵌套类) : 局部嵌套类定义在 enclosing class 的方法里面,局部嵌套类有 enclosing class 属性和 enclosing method 属性anonymous nested cl

3、ass(匿名嵌套类):匿名嵌套类没有显示的定义一个类,直接通过 new 的方法创建类的实例。一般回调模式情况下使用的比较多member nested class 可以使用 public,private,protected 访问控制符,也可以用static,final 关键字local nested class 可以使用 final 关键字anonymous nested class 不使用任何关键字和访问控制符见下面的代码public class EnclosingClass public static final class NestedMemberClass public void nes

4、tedLocalClass() final class NestedLocalClass public void nestedAnonymousClass() new Runnable() Overridepublic void run() ;在大多数情况下,一般把 nested classes 分为两种:Static Nested Classes(静态嵌套类): 就是用 static 修饰的成员嵌套类InnerClass:静态嵌套类之外所有的嵌套类的总称 ,也就是没有用 static 定义的 nested classes,Inner Classes 不能定义为 static,不能有 stat

5、ic 方法和 static 初始化语句块。在 JLS( java 语言规范)里面是这么定义的:An inner class is a nested class that is not explicitly or implicitly declared static. Inner classes may not declare static initializers (8.7) or member inter- faces 其中 Inner Class 又可以分为三种:1 inner member classes :没有用 static 修饰的成员内部类2 local inner classes

6、 : 定义在方法里面的内部类,方法可以是 static 的也可以是非static 的,也可以是构造器方法。3 anonymous inner classes :定义在方法里面匿名类,方法可以是 static 的也可以是非 static 的嵌套类访问规则Static Nested Classes 以及 inner classes 有一些限制规则,下面介绍一下这些规则。 Static Nested Classes 访问规则用 Static 修饰的 Nested Classes,只能访问外部类的非 static 变量。对于 public 的 static Nested Classes 可以用 new

7、 外部类.内部类()的方式直接创建。而默认的 static Nested Classes 可以在同一包名下,用 new 外部类.内部类()的方式创建。其实和外部类的方式差不多。静态成员类可以使用访问控制符,可以使用 static 修饰,可以是abstract 抽象类public class StaticNestedClass / 私有局部private int i = 0;/ 静态public static int j = 0;/ 不变值private final int k = 0; / static finalprivate static final int m = 0;/ 静态嵌套内,这

8、里不是 innerclass,可以直接 new 出来public static class PublicNestedClass private void test1() / System.out.println(i); 非innerClass 不能 访问 enclosing类的非 static 属性System.out.println(j);System.out.println(m);/ System.out.println(k); 非innerClass 不能 访问 enclosing类的非 static 属性/ 可以定 义 static 方法private static void test

9、2() / 静态嵌套内,这里不是 innerclass,由于是私有的,不可以直接 new 出来private static class PrivateNestedClass 下面的例子演示了 static Nested class 的创建public class TestClass public static void main(String args) /任何地方都可以 创建StaticNestedClass.PublicNestedClass publicNestedClass = new StaticNestedClass.PublicNestedClass();/可以在同一 packa

10、ge 下创建StaticNestedClass.DefaultNestedClass defaultNestedClass = new StaticNestedClass.DefaultNestedClass();/编译错误 ,无法访问 内部内/StaticNestedClass.PrivateNestedClass privateNestedClass = new StaticNestedClass.PrivateNestedClass(); Inner Class 访问规则inner member classes(内部成员类) 可以访问外部类的所有实例属性,静态属性。因为内部成员类持有一个

11、外部对象的引用,内部类的实例可以对外部类的实例属性进行修改。如果是 public 的 inner member classes,可以通过 外部类实例.new 内部类()的方式进行创建,当调用内部类的构造器的时候,会把当前创建的内部类对象实例中持有的外部对象引用赋值为当前创建内部类的外部类实例。内部成员类可以是使用访问控制符,可以定义为 final,也可以是抽象类。public class MemberInnerClass / 私有局部 public int i = 0;/ 静态private static int j = 0;/ 不变值private final int k = 0;/ sta

12、tic finalprivate static final int m = 0;public class PublicMemberInnerClass / enclosing Class 的属性都可以访问public void test() System.out.println(i);System.out.println(j);System.out.println(m);System.out.println(k);public MemberInnerClass getOutterClass() return MemberInnerClass.this;/ 这里会 报错,不允许 定义 stati

13、c 方法/ private static final void test();/ 私有的 innerclass 外部不能访问private class PrivateMemberInnerClass / 公开局部类,外部可以访问和创建,但是只能通过 OutterClass实例创建class DefaultMemberInnerClass public MemberInnerClass getOutterClass() return MemberInnerClass.this;下面例子演示了内部成员类的创建public class TestClass public static void mai

14、n(String args) / 任何地方都可以 创建MemberInnerClass t = new MemberInnerClass();/ 可以 创建,pmic 里面保存 对 t 的引用MemberInnerClass.PublicMemberInnerClass pmic = t.new PublicMemberInnerClass();/ 可以在同一 package 下创建,dmic 保存对 t的引用MemberInnerClass.DefaultMemberInnerClass dmic = t.new DefaultMemberInnerClass();/ 编译错误 ,无法访问

15、内部内/ MemberInnerClass.PrivateMemberInnerClass pmic = t.new / PrivateMemberInnerClass();/ 下面 验证一下 outterClass 是同一个对象System.out.println(pmic.getOutterClass() = t);System.out.println(dmic.getOutterClass() = t);运行程序,打印结果:truetrue2 local inner classes(局部类)局部类 定义在类方法里面。这个方法既可以是静态方法,也可以是实例方法,也可以是构造器方法或者静态初

16、始化语句块。局部类可以定义在一个 static 上下文里面 和 非 static 上下文里面。局部类不能有访问控制符(private,public,protected 修饰),可以是抽象的,也可以定义为 final定义在 static 上下文(static 字段初始化,static 初始化块, static 方法)里面的 local inner classes 可以访问类的静态属性,如果定义在静态方法里面的局部类,还可以方法里面定义的 final 变量。在 static 上下文定义的局部类,没有指向父类实例变量的引用,因为 static 方法不属于类的实例,属于类本身。而且局部类不能在外部进行创建,只能在方法调用的时候进行创建public class LocalInnerClass / 私有局部priva

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号