内部类详解_免费下载.docx_第1页
内部类详解_免费下载.docx_第2页
内部类详解_免费下载.docx_第3页
内部类详解_免费下载.docx_第4页
内部类详解_免费下载.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

内部类详解_免费下载.docx.docx 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内部类详解什么内部类呢?内部类总共分为四种,分别是静态内部类,成员内部类,局部内部类,匿名内部类,成员内部类(member inner class)什么是成员内部类呢?它可以访问外部类的静态和非静态的方法与成员变量。它的格式为:Class A Class B /内部类生成成员内部类对象的方式为:A.B ab=new A().new B();内部类访问规则内部类的访问规则:a) 内部类可以直接访问外部类中的成员,包括私有,b) 外部类要访问内部类,必须要建立内部类对象为了了解内部类访问规则,我们看如下代码,class InnerTest public static void main(String args) A b=new A();b.function();class A private int a=4; /打印4,必须这样写A.this.aclass Bint a=6; /打印6,必须这样写this.a public void method() int a=5; /打印5,只写a System.out.println(a=+A.this.a); public void function() B b=new B();b.method();总结:我们之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式是 外部类名.this那么我们怎么去定义内部类的对象,并调用内部类的方法呢?当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象,格式如下:外部类名.内部类名 变量名 =new 外部类名().new 内部类名();例如 A.B ab=new A().new B();静态内部类(static inner class)我们要知道,当内部类在成员位置上,就可以被成员修饰符所修饰。比如private:将内部类在外部类中进行封装。当加上static,内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类的static成员,出现了访问局限。在外部类其他类中,如何直接访问static内部类非静态方法呢?格式如下:new 外部类名.内部类名().非静态方法名;例如如下代码: class InnerTest public static void main(String args) new A.B().method(); /格式class A private static int a=4; /静态成员变量static class B /静态内部类 public void method() /非静态方法 System.out.println(a=+a); public void function() B b=new B();b.method();那么我们也就可以知道,访问静态方法的格式是:外部类名.内部类名.静态方法名();我们还要注意一点,当内部类中定义了静态成员,该内部类必须是static。当外部类中的静态方法访问内部类时,内部类必须是静态的。内部类定义原则是什么呢?当描述事物时,事物的内部还有事物,该事物就用内部类来描述。因为内部类事物在使用外部事物的内容。我们一般把内部类用private修饰,那么我们如何访问一个被private修饰的内部类的方法呢?;我们去在外部类定义一个方法来调用内部类中的方法,例如:Class A Private class B Void method()Public void show()new B().method;总结:静态内部类只能访问外部类的静态成员变量与静态的方法。生成静态内部类对象的方式为:A.B ab=new A.B();局部内部类(Local Inner Class)局部内部类是定义在方法当中,只能访问方法中声明的final类型的变量我们先看看当内部类定义在局部时,就是定义在方法里。我们要注意:1. 不可以被成员修饰符修饰2. 可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量我们看看如下例子:class InnerTest2 public static void main(String args) Outer o=new Outer();o.method(7); /运行完后销毁o.method(6);class Outer int x=3;void method(final int a) /声明成final类型 final int y=9; /声明成final类型 class Inner void show()System.out.println(x=+y); System.out.println(a=+a); new Inner().show(); /这个必须放下面匿名内部类(Anonymous Inner Class)现在我们来看看什么是匿名内部类?1. 匿名内部类其实就是内部类的简写格式。2. 定义匿名内部类的前提,就是内部类必须是继承一个类或者实现接口我们看看把如下代码简化成匿名内部类:简化前:class Test3 public static void main(String args) new Outer().function();abstract class T/定义一个抽象类public abstract void show();class Outerint a=3; class Inner extends T /继承抽象类T public void show() /复写抽象类T的方法 System.out.println(a=+a); public void function() new Inner().show();简化后:class Test3 public static void main(String args) new Outer().function();abstract class T/定义一个抽象类public abstract void show();class Outerint a=3;public void function() new T() /直接new抽象类T是作为内部类 public void show() /复写抽象类T的方法 System.out.println(a=+a); .show(); /记住.show()是调用内部类方法,如果不调用,记住大括号后面加分号从以上蓝色代码中我们就认

温馨提示

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

评论

0/150

提交评论