欢迎来到天天文库
浏览记录
ID:42545300
大小:20.82 KB
页数:6页
时间:2019-09-17
《内部类详解_免费下载》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、内部类详解什么内部类呢?内部类总共分为四种,分别是静态内部类,成员内部类,局部内部类,匿名内部类,成员内部类(memberinnerclass)什么是成员内部类呢?它可以访问外部类的静态和非静态的方法与成员变量。它的格式为:ClassA{ClassB{//内部类}}生成成员内部类对象的方式为:A.Bab=newA().newB();内部类访问规则内部类的访问规则:a)内部类可以直接访问外部类中的成员,包括私有,b)外部类要访问内部类,必须要建立内部类对象为了了解内部类访问规则,我们看如下代码,classI
2、nnerTest{publicstaticvoidmain(String[]args){Ab=newA();b.function();}}classA{privateinta=4;//打印4,必须这样写A.this.aclassB{inta=6;//打印6,必须这样写this.apublicvoidmethod(){inta=5;//打印5,只写aSystem.out.println("a=="+A.this.a);}}publicvoidfunction(){Bb=newB();b.method();}
3、}总结:我们之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式是外部类名.this那么我们怎么去定义内部类的对象,并调用内部类的方法呢?当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象,格式如下:外部类名.内部类名变量名=new外部类名().new内部类名();例如A.Bab=newA().newB();静态内部类(staticinnerclass)我们要知道,当内部类在成员位置上,就可以被成员修饰符所修饰。比如private:将内部类在外
4、部类中进行封装。当加上static,内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类的static成员,出现了访问局限。在外部类其他类中,如何直接访问static内部类非静态方法呢?格式如下:new外部类名.内部类名().非静态方法名;例如如下代码:classInnerTest{publicstaticvoidmain(String[]args){newA.B().method();//格式}}classA{privatestaticinta=4;//静态成员变量stati
5、cclassB//静态内部类{publicvoidmethod(){//非静态方法System.out.println("a=="+a);}}publicvoidfunction(){Bb=newB();b.method();}}那么我们也就可以知道,访问静态方法的格式是:外部类名.内部类名.静态方法名();我们还要注意一点,当内部类中定义了静态成员,该内部类必须是static。当外部类中的静态方法访问内部类时,内部类必须是静态的。内部类定义原则是什么呢?当描述事物时,事物的内部还有事物,该事物就用内部类
6、来描述。因为内部类事物在使用外部事物的内容。我们一般把内部类用private修饰,那么我们如何访问一个被private修饰的内部类的方法呢?;我们去在外部类定义一个方法来调用内部类中的方法,例如:ClassA{PrivateclassB{Voidmethod(){}}Publicvoidshow(){newB().method;}}总结:静态内部类只能访问外部类的静态成员变量与静态的方法。生成静态内部类对象的方式为:A.Bab=newA.B();局部内部类(LocalInnerClass)局部内部类是定义
7、在方法当中,只能访问方法中声明的final类型的变量我们先看看当内部类定义在局部时,就是定义在方法里。我们要注意:1.不可以被成员修饰符修饰2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量我们看看如下例子:classInnerTest2{publicstaticvoidmain(String[]args){Outero=newOuter();o.method(7);//运行完后销毁o.method(6);}}classOute
8、r{intx=3;voidmethod(finalinta){//声明成final类型finalinty=9;//声明成final类型classInner{voidshow(){System.out.println("x=="+y);System.out.println("a=="+a);}}newInner().show();//这个必须放下面}}匿名内部类(AnonymousInnerClass)现在我们来看看什么是匿名内
此文档下载收益归作者所有