ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:22.37KB ,
资源ID:3541277      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3541277.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java内部类.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java内部类.docx

1、java内部类内部类概述内部类是编译期状态! 编译器知道, 虚拟机不知道,在虚拟机处,会成为正常的类,反编译代码会失败,甚至不好还原JVM和昨天的我一样,不知道什么叫内部类!1什么是内部类把一个类定义在另一个类之内,就是内部类。例如把B类定义在A类之内,那么我们称A类为外部类,而B类为内部类。2成员内部类内部类是外部类的成员!即被外部类类体直接包含。class A class B 3一般内部类都是私有的可以对成员内部类使用任何访问修饰符(4种都可以修饰)非内部类能使用public或者默认。public class Test public int a = 10; public static vo

2、id main(String args) Test t = new Test(); t.test(); public void test() A a = new AImpl(); Demo.func(a); /不会被其他类使用,只有Test类会只用 /这个类只在外部类的范围内可见 /成员内部类通常会被修饰为private /好处:隐藏代码 /成员内部类,可以使用外部类的成员(不需要对象的引用,直接使用) private class AImpl implements A public void fun1() syso(a);/外部类,不能使用访问 内部类的内容 class Demo public

3、 static void fun(A a) a.fun1(); interface A void func1();4内部类访问外部类成员内部类中可以直接方法外部类的成员(属性和方法),包含私有成员!interface A void func1();class Demo public static void fun(A a) a.fun1(); public class Test public int a = 10;/private public static void main(String args) Test t = new Test(); t.test(); public void te

4、st() A a = new AImpl(); Demo.func(a); private class AImpl implements A public void fun1() System.out.println(a);/ 外部类,不能使用访问 内部类的内容 5外部类中使用创建内部类对象外部类不能直接访问内部类成员外部类的特权可以创建内部类对象。因为通常成员内部类都是private的。比较多见的信箱6内部类拥有外部类对象(与继承相似)为什么是内部类中可以访问外部类成员呢?原因:是内部类对象有一个外部类对象。可以理解与继承相同!7内部类的class文件成员内部类的class文件:外部类名$内

5、部类名.class8非static内部类不能拥有static的属性和方法成员内部类中不能有static的属性和方法,不然编译失败!public class Test2 private int i = 10; public void fun() System.out.println(你好); public static void main(String args) /Inner inner = new Inner(); private class Inner public void innerFun() System.out.println(i); fun(); 9成员内部类限制public c

6、lass Test2 public static void main(String args) /* * 无法在上下文中使用静态变量this * 外部类只能在构造器或者实例方法中创建内部类对象 * 但是,给类加static 就可以以下列的方式创建对象了 */ Inner inner = new Inner(); private static class Inner public class Test public static void main(String args) / 外部类只能在构造器或者实例方法中创建内部类对象。 Inner inner = new Inner(); private

7、 class Inner 无法从静态上下文中引用非静态 变量 this、或者给类加static在静态方法中,不能访问实例(非静态)成员!就好比静态方法中不能访问实例属性、实例方法一样,也不能访问成员内部类一样。范例:public class Test2 private int i = 10; public void fun() System.out.println(你好); public static void main(String args) /Inner inner = new Inner(); private class Inner public static int a= 10; p

8、ublic void innerFun() System.out.println(i); fun(); 小结 成员内部类定义在外部类的类体中,被外部类直接包含; 成员内部类可以使用任意访问修饰符; 成员内部类如果是private修饰的,那么只在外部类范围之内可见; 成员内部类中可以直接访问外部类其他成员。 成员内部类中不能定义static属性或方法; 外部类的静态方法中不能创建成员内部类对象。好处: 隐藏代码与继承相似局部内部类(很少用)把语法了解了,也就可以了。1方法内部的类是局部内部类把一个类定义在方法(构造器)中。class Outer void fun() class Inner 1局

9、部内部类不能使用访问修饰符!2局部内部类只在定义的方法内可见,而且是在内部类定义的下面才能可见!3.在相同方法内,只能定义一个局部内部类,不能有同名情况出现public class Test3 public void fun() class Inner new Inner(); public void fun1() class Inner 2局部内部类还可以访问所在的局部中所有局部变量局部内部类可以访问局部变量(包含形参),但有一个要求:局部变量必须是final的。public class Test3 public void fun(final int n) final int a = 10

10、; class Inner public void funfun() System.out.println(a); new Inner(); public void fun1() class Inner 3局部内部类不能使用访问修饰符和静态修饰符局部内部类与局部变量相似,都不能使用修饰符来修饰。4局部内部类只在局部可见局部内部类只在定义处,到包含它的块结束。5局部内部类的class文件外部类名$局部编号内部类名6多次调用局部方法,只会创建一个局部内部类类在编译时已经生成了.class文件,在运行时已经没有内部类一说,与正常类没有区别了那么局部内部类,和其他的区别:1.局部内部类的可见度(存在范

11、围),只在当前方法中存在,与局部变量一样2.局部内部类,与成员内部类一样,可以访问外部类的属性,和外部类的方法3.可以使用final的局部变量4.同样的,7局部内部类不能拥有静态的属性和方法这一点与成员内部类一样。8小结 局部内部类只在局部内可以!而且还是在定义之后才可见! 可以访问外部类的成员(所有属性和所有方法),其实成员内部类也有这个特性。 局部内部类可以访问局部变量,但要求被访问的局部变量必须是final的。 局部内部类不能定义static成员。其实成员内部类也有这个特性。局部匿名内部类匿名内部类都是局部的,在局部内部类中,演变的一种新形式局部匿名内部类没有名字。一个类如果没有名字,它

12、的构造器是什么样子的?-不知道构造器,能创建对象么?创建一个类,我们的目的是什么?不就是使用它的对象么?1匿名内部类的语法创建类的同时还要创建对象,而且只能创建这一个对象!用什么引用指向它呢?所以匿名类在创建时要么指定一个父类,要么指定一个实现的接口。这时就可以使用父类或实现的接口的引用来指向它。new A()上面的语句:创建了一个A类的子类对象,这个子类没有名字。其中大括号内容就是这个子类的类体!范例:public class Test4 public static void main(String args) Ab A = new Ab(); class Ab public class T

13、est4 public static void main(String args) Ab A = new Ab() ; class Ab public class Test4 public static void main(String args) Ab a = new Ab() public void fun() System.out.println(你好!); ; a.fun();/出错,调用方法受到引用类型的限制 class Ab public class Test4 public static void main(String args) Ab a = new Ab() public

14、void fun() System.out.println(你好!); ; a.fun();/出错,调用方法受到引用类型的限制 class Ab public void fun() public class Test4 public static void main(String args) Ab a = new Ab() public void fun() System.out.println(你好!); ; a.fun();/出错,调用方法受到引用类型的限制 B b = new B();/实现了B接口的子类,但是类没有名字 class Ab public void fun() interf

15、ace Bpublic class Test4 public static void main(String args) Ab a = new Ab() public void fun() System.out.println(你好!); ; a.fun();/出错,调用方法受到引用类型的限制 B b = new B();/实现了B接口的子类,但是类没有名字/此时编译不通过,因为没有实现接口中的方法 class Ab public void fun() interface B void fun1(); void fun2();public class Test4 public static v

16、oid main(String args) Ab a = new Ab() public void fun() System.out.println(你好!); ; a.fun();/出错,调用方法受到引用类型的限制 B b = new B() public void fun1() System.out.println(B.fun1(); public void fun2() System.out.println(B.fun2(); ;/实现了B接口的子类,但是类没有名字 b.fun1(); b.fun2(); class Ab public void fun() interface B vo

17、id fun1(); void fun2();范例:用匿名内部类的方式,实现下列接口,在实现类中使用循环,打印1-10的数字public class Test5 public static void main(String args) Run r = new Run() public void run() for(int i =0;i=10;i+) System.out.println(i); ; r.run(); interface Run void run();public class Test5 public static void main(String args) new Run()

18、 public void run() for(int i =0;i=10;i+) System.out.println(i); .run(); interface Run void run();2匿名内部类只能使用一次匿名内部类只能使用一次(创建对象),因为它没有名字,不能再次创建对象。匿名内部类是把一个类定义在一个new语句中。new 假构造器名()匿名类的类体假构造器:就是匿名类的父类名,或者是匿名类的所实现的接口类。3匿名内部类必须指定父类或者指定实现的接口匿名内部类要么指定一个父类,要么指定一个实现的接口。两者必须选择其一,而且只能选择其一。4匿名内部类不能同时继承和实现匿名内部类要么

19、指定一个父类,要么指定一个实现的接口。两者必须选择其一,而且只能选择其一。5匿名内部类最多实现一个接口匿名内部类要么指定一个父类,要么指定一个实现的接口。两者必须选择其一,而且只能选择其一。6匿名内部类的实例块匿名类的构造代码块可以用来做为匿名类的构造器来用。public class Test5 public static void main(String args) new Run() System.out.println(构造方法); public void run() for(int i =0;i=10;i+) System.out.println(i); .run(); interfa

20、ce Run void run();public class Test5 public static void main(String args) A a = new A(20); A.B ab = new A(10).new B(); class A public A(int n) public class B public class Test5 public static void main(String args) A a = new A(20); /A.B 叫做对象引用名 A.B ab = new A(10).new B(); A aa = new A(100); A.B ab =

21、aa.new B(); /对象.new的语法 class A public A(int n) new B();/=this.new B(); 平时写代码的时候会省略掉的内容 public class B extends C /C ,是D的内部类 class D public class C 小结如何在内部类中引用外部类?使用时的3种情况:什么都不写:在内部类查找,找不到再去外部类中找。this:只在内部类中查找外部类引用.this:只在外部类查找class Outer public void fun() System.out.println(Outer); class Inner public

22、 void fun() System.out.println(Inner); public void test() /内部,外部,都有一个fun方法,此时fun使用的是哪个方法 fun(); public void test() /方法不能是static类型的 Inner inner = this.new Inner();/可以省略不写的 inner.test(); public class Test6 public static void main(String args) Outer o = new Outer(); o.test(); class Outer public void fu

23、n() System.out.println(Outer); class Inner public void fun() System.out.println(Inner); public void test() /fun(); this.fun(); public void test() Inner inner = new Inner(); inner.test(); public class Test6 public static void main(String args) Outer o = new Outer(); o.test(); class Outer public void

24、fun() System.out.println(Outer); class Inner public void fun() System.out.println(Inner); public void test() Outer.this.fun(); /fun(); /this.fun(); public void test() Inner inner = new Inner(); inner.test(); public class Test6 public static void main(String args) Outer o = new Outer(); o.test(); 嵌套类

25、也叫静态成员内部类1什么是嵌套类成员内部类再加上static来修饰就是嵌套类。2嵌套类中不能访问外部类的实例内容因为嵌套类是静态的,它与静态方法一样,都不能访问本类中实例的属性和实例的方法。public class Outer private int i = 10; public static class Inner public void fun() System.out.println(i); /无法从静态中打印非静态的内容 3嵌套类基本与外部类没什么关系嵌套类可以访问外部类的static成员。其实正常类也可以访问另一个类的static成员,不过访问不了private的静态成员。(谁访问静

26、态成员都不需要对象来访问,所以嵌套类也没什么特权)。唯一特权可以是访问外部类中private的静态成员。4接口中可以定义嵌套类-没道理的事情接口中定义的类,默认是public static。也就是说定义在接口中的类都是嵌套类。interface Interface-怪异语法 public static class Inner5嵌套类一般是public的一般来说嵌套类与正常类基本没有太大的区别。接口中必须死public的6外界使用嵌套类外部类.内部类 对象名 = new外部类.内部类();大家可以把这种方法理解为类名中包含了点,也就没有什么奇怪的了。与使用正常样没有区别。内部类的好处1隐藏代码成员内部类、局部内部类、匿名类都可以把一个类隐藏起来,让外界不

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1