java中内部类与外部类的学习资料

上传人:小** 文档编号:50552936 上传时间:2022-01-20 格式:DOC 页数:9 大小:98.50KB
收藏 版权申诉 举报 下载
java中内部类与外部类的学习资料_第1页
第1页 / 共9页
java中内部类与外部类的学习资料_第2页
第2页 / 共9页
java中内部类与外部类的学习资料_第3页
第3页 / 共9页
资源描述:

《java中内部类与外部类的学习资料》由会员分享,可在线阅读,更多相关《java中内部类与外部类的学习资料(9页珍藏版)》请在装配图网上搜索。

1、内部类的位置:内部类可以作用在方法里以及外部类里,作用在方法里称为局部内部类,作用在外部类里分为实例内部类和静态内部类。外部类和内部类的类访问修饰符:外部类可以是 public和默认的,内部类可以是 public,private,protected类型的内部类和外部类的关系:*在【实例内部类中】A :内部类可以访问外部类中所有的任何访问修饰符的成员。B:而一个外部类实例对应0个或n个内部类实例。在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问才可以*在【静态内部类中】A :静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,就 必须通过外部类的实例去访问。在创建内部

2、类的实例的时候,不必创建外部类的实例.B :外部类可以通过完整的类名来直接访问静态内部类的静态成员,如果要访问 静态内部类的非静态成员则需要创建静态内部类的一个实例才行package com .ming;public classStaticI nn erTest public static class A publicinta = 10;staticintb = 100;public staticvoid main( Stri ng args) Static Inn erTest.A mya =mya. a = 1234;System. out .println(new Static Inn

3、erTest.A();+ mya. a);以上是可以运行成功的,已经经过测试*在【局部内部类中】A :局部内部类和实例内部类一样,可以访问外部类的所有成员 B :外部类根本不知道局部内部类的存在,所以访问不了。内部类的分类:1,成员内部类(实例内部类,静态内部类)2.局部内部类(一) 成员内部类(没有在方法中定义的内部类)* (1)实例内部类:(1) 在创建实例内部类的实例的时候,外部类的实例必须已经存在Outernn erTools its = new Out(). new Inn erTools();以上代码等价于:Outer out = new Outer();Outernn erToo

4、ls its = out .new Inn erTools();(2) 实例内部类的实例【自动】持有对外部类的实例的引用,所以在实例内部类中可以直接访问外部类的所有成员(这里指的是外部类当中所有的public,protected,private,static 的方法和成员变量)之所以能访问,是因为在实例内部类中需要现有外部类的实例,才能有内部类的实例渗见(1).Outernn erTools its = new Outer(). newl nn erTools();【注意:】在多重嵌套中,实例内部类可以访问所有外部类的成员Class APrivate void methodA()Class B

5、Private void methodB()Class CPrivate void MethodC() methodA(); methodB();(3) 在实例内部类中,外部类的实例与内部类的实例是一对多的关系,一个内部类实例只会引用一个外部类实例,而一个外部类实例对应0个或n个内部类实例,在外部类中【不能】直接访问内部类的成员,必须通过内部类的实例去访问才可以。(4) 在实例内部类中不能定义静态成员* (2)静态内部类(1) 静态内部类的实例 【不会自动持有】 外部类的实例的引用,在创建内部类的实例时,不必创建外部类的实例Class APublic static class B In tv;

6、Class TestPublic void test()A.B b = new A.B(); b.v = 1;(2) 静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,就必须通过 外部类的实例去访问class Aprivate int a1;private static int a2; public static class Bint b1 = a1;int b2 = a2;int b3 = new A().a1;(3) 在静态内部类中可以定义静态成员和实例成员 class Apublic static class Bin t v1;static int v2;public s

7、tatic class C static int v3;; 测试类可以通过完整的类名来直接访问静态内部类的静态成员class Apublic static class Bin t v1;static int v2;public static class Cstatic int v3;int v4;public class Clie ntpublic void test()A.B b = new A.B(); ABC c = new A.B.C(); b.v1 = 1;b.v2 = 1;A.B.v1 = 1/errorA.B.v2 = 1;A.B.C.v3 = 1;(二) 局部内部类(在一个方法

8、中定义的内部类)局部内部类是在一个方法当中定义的内部类,它的可见范围是当前方法。和局部变量一样,局部内部类不能使用访问修饰符(public , private , protected)以及static来修饰,局部内部类的特点是: 局部内部类只能在当前方法中使用class AB b = new B();/errorpublic void method() class Bin t v1;in t v2;class Cin t v3;B b = new B();B.C c = b.new C();(2)局部内部类和实例内部类一样,不能包含静态成员。class Apublic void method(

9、)class Bstatic int v1;/error in t v2;static class C /errorint v3;;(3)在局部内部类中定义的内部类同样也不能被public protected, private这些访问修饰符修饰(局部内部类不能被public protected private访问修饰符修饰)(4)局部内部类和实例内部类一样,可以访问外部类的所有成员,此外,局部内部类还可以访问所在方法中的 final类型的参数和变量class Aint a;public void method nal int p1,i nt p2)int localV1 =1;final in

10、t localV2 = 2;class Bint b1 =a;int b2 =p1;int b3 =p2;/errorint b4 =localV1/errorint b5 =localV2;(三) 匿名内部类匿名类是一种特殊的内部类,这种内部类没有自己的名字(1) 匿名内部类本身没有构造器,但是会调用父类中的构造器。package com .ming;public class A 不是默认构造器”);默认构造器”);from A);A(i nt y)System. out .println( A()System. out .println( void method()System. out

11、.println( public static void main( Stri ng args) /new A().method();默认构造器,from AA a = new A()void method()System. out .println(”我是匿名内部类中的method方法”);/*也就是说匿名构造器会自动调用父类中的构造器*/a.method(); /默认构造器,我是匿名内部类中的method方法(2) 匿名内部类尽管没有构造方法,但是可以在匿名内部类中提供一段实例初始化代码, Java虚拟机会在调用了父类的构造方法之后,执行这段代码。public static void ma

12、in( Stri ng args)int v = 1;A a = new A(v)System.out.pri ntln (i nit in sta nee);void method() System.out.pri ntln (from anonym ous);;a.method();程序执行结果如下:ano ther con strueter/父类当中的构造器执行的结果init in sta neefrom anonym ous(3) 除了可以在外部类的方法内定义匿名类外,还可以在声明一个成员变量时定义匿名内 部类。abstract class AA a = new A()void met

13、hod()System.out.pri ntln (i nn er); ;abstract void method(); 匿名内部类除了可以继承类外,还可以实现接口【重点】Ccass Samplepublic static void main( Stri ng args)Thread t = new Thread( new Runn able() public void run()for(int i = 0; i 100; i+) System.out.pri nt(i);); 匿名内部类同局部内部类一样,可以访问外部类的所有成员,如果匿名内部类位于一个 方法中,还能访问所在方法的final类型的变量和参数 (6)局部内部类和匿名内部类一样,名字在方法外都是不可见的,因此都可以起到封装类型 名字的作用。【匿名内部类和局部内部类的区别】1,匿名内部类的程序代码量少2,一个局部内部类可以有多个重载构造方法,并且测试类可以多次创建局部内部类的实例。而匿名内部类没有重载构造方法之说,并且只能创建一次实例。因此,如果只需要创建内部类的一个实例,可以使用匿名内部类, 它能使程序代码简洁明了,如果需要多次创建内部类的实例,那么使用局部内部类。内部类小结:作者:小明参考资料:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!