java内部类Word文档下载推荐.docx

上传人:b****3 文档编号:16446611 上传时间:2022-11-23 格式:DOCX 页数:22 大小:22.37KB
下载 相关 举报
java内部类Word文档下载推荐.docx_第1页
第1页 / 共22页
java内部类Word文档下载推荐.docx_第2页
第2页 / 共22页
java内部类Word文档下载推荐.docx_第3页
第3页 / 共22页
java内部类Word文档下载推荐.docx_第4页
第4页 / 共22页
java内部类Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

java内部类Word文档下载推荐.docx

《java内部类Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java内部类Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

java内部类Word文档下载推荐.docx

//成员内部类通常会被修饰为private

//好处:

隐藏代码

//成员内部类,可以使用外部类的成员(不需要对象的引用,直接使用)

privateclassAImplimplementsA{

publicvoidfun1(){

syso(a);

//外部类,不能使用访问内部类的内容

}

}

classDemo{

publicstaticvoidfun(Aa){

a.fun1();

interfaceA{

voidfunc1();

4 内部类访问外部类成员

  内部类中可以直接方法外部类的成员(属性和方法),包含私有成员!

//private

System.out.println(a);

//外部类,不能使用访问内部类的内容

5 外部类中使用创建内部类对象

  外部类不能直接访问内部类成员

  外部类的特权可以创建内部类对象。

因为通常成员内部类都是private的。

比较多见的信箱

 

6 内部类拥有外部类对象(与继承相似)

  为什么是内部类中可以访问外部类成员呢?

  原因:

是内部类对象有一个外部类对象。

可以理解与继承相同!

7 内部类的class文件

  成员内部类的class文件:

外部类名$内部类名.class

8 非static内部类不能拥有static的属性和方法

成员内部类中不能有static的属性和方法,不然编译失败!

publicclassTest2{

privateinti=10;

publicvoidfun(){

System.out.println("

你好"

);

publicstaticvoidmain(String[]args){

//Innerinner=newInner();

privateclassInner{

publicvoidinnerFun(){

System.out.println(i);

fun();

9 成员内部类限制

/**

*无法在上下文中使用静态变量this

*外部类只能在构造器或者实例方法中创建内部类对象

*但是,给类加static就可以以下列的方式创建对象了

*/

Innerinner=newInner();

privatestaticclassInner{

publicclassTest{

//外部类只能在构造器或者实例方法中创建内部类对象。

privateclassInner{

无法从静态上下文中引用非静态变量this、或者给类加static

  在静态方法中,不能访问实例(非静态)成员!

  就好比静态方法中不能访问实例属性、实例方法一样,也不能访问成员内部类一样。

范例:

publicstaticinta=10;

小结

●成员内部类定义在外部类的类体中,被外部类直接包含;

●成员内部类可以使用任意访问修饰符;

●成员内部类如果是private修饰的,那么只在外部类范围之内可见;

●成员内部类中可以直接访问外部类其他成员。

●成员内部类中不能定义static属性或方法;

●外部类的静态方法中不能创建成员内部类对象。

好处:

隐藏代码

与继承相似

局部内部类(很少用)

  把语法了解了,也就可以了。

1 方法内部的类是局部内部类

  把一个类定义在方法(构造器)中。

  classOuter{

  voidfun(){

   classInner{}

    }

1 局部内部类不能使用访问修饰符!

2 局部内部类只在定义的方法内可见,而且是在内部类定义的下面才能可见!

3.在相同方法内,只能定义一个局部内部类,不能有同名情况出现

publicclassTest3{

classInner{

newInner();

publicvoidfun1(){

2 局部内部类还可以访问所在的局部中所有局部变量

  局部内部类可以访问局部变量(包含形参),但有一个要求:

局部变量必须是final的。

publicvoidfun(finalintn){

finalinta=10;

publicvoidfunfun(){

System.out.println(a);

}

3 局部内部类不能使用访问修饰符和静态修饰符

  局部内部类与局部变量相似,都不能使用修饰符来修饰。

4 局部内部类只在局部可见

  局部内部类只在定义处,到包含它的块结束。

5 局部内部类的class文件

外部类名$局部编号内部类名

6 多次调用局部方法,只会创建一个局部内部类

类在编译时已经生成了.class文件,在运行时已经没有内部类一说,与正常类没有区别了

那么局部内部类,和其他的区别:

1.局部内部类的可见度(存在范围),只在当前方法中存在,与局部变量一样

2.局部内部类,与成员内部类一样,可以访问外部类的属性,和外部类的方法

3.可以使用final的局部变量

4.

同样的,

7 局部内部类不能拥有静态的属性和方法

  这一点与成员内部类一样。

8 小结

●局部内部类只在局部内可以!

而且还是在定义之后才可见!

●可以访问外部类的成员(所有属性和所有方法),其实成员内部类也有这个特性。

●局部内部类可以访问局部变量,但要求被访问的局部变量必须是final的。

●局部内部类不能定义static成员。

其实成员内部类也有这个特性。

局部匿名内部类

匿名内部类都是局部的,在局部内部类中,演变的一种新形式

  局部匿名内部类没有名字。

  一个类如果没有名字,它的构造器是什么样子的?

-------不知道构造器,能创建对象么?

创建一个类,我们的目的是什么?

不就是使用它的对象么?

1 匿名内部类的语法

  创建类的同时还要创建对象,而且只能创建这一个对象!

  用什么引用指向它呢?

所以匿名类在创建时要么指定一个父类,要么指定一个实现的接口。

  这时就可以使用父类或实现的接口的引用来指向它。

  newA(){}

上面的语句:

创建了一个A类的子类对象,这个子类没有名字。

其中大括号内容就是这个子类的类体!

publicclassTest4{

AbA=newAb();

classAb{}

AbA=newAb(){};

Aba=newAb(){

publicvoidfun(){

System.out.println("

你好!

"

};

a.fun();

//出错,调用方法受到引用类型的限制

classAb{publicvoidfun(){}}

Bb=newB(){};

//实现了B接口的子类,但是类没有名字

classAb{

interfaceB{

//此时编译不通过,因为没有实现接口中的方法

interfaceB{

voidfun1();

voidfun2();

Bb=newB(){

publicvoidfun1(){

B...fun1()"

publicvoidfun2(){

B...fun2()"

b.fun1();

b.fun2();

用匿名内部类的方式,实现下列接口,在实现类中使用循环,打印1-10的数字

publicclassTest5{

Runr=newRun(){

publicvoidrun(){

for(inti=0;

i<

=10;

i++){

System.out.println(i);

}

r.run();

interfaceRun{

voidrun();

newRun(){

}.run();

2 匿名内部类只能使用一次

  匿名内部类只能使用一次(创建对象),因为它没有名字,不能再次创建对象。

  匿名内部类是把一个类定义在一个new语句中。

  new假构造器名(){匿名类的类体}

  假构造器:

就是匿名类的父类名,或者是匿名类的所实现的接口类。

3 匿名内部类必须指定父类或者指定实现的接口

  匿名内部类要么指定一个父类,要么指定一个实现的接口。

两者必须选择其一,而且只能选择其一。

4 匿名内部类不能同时继承和实现

5 匿名内部类最多实现一个接口

6 匿名内部类的实例块

  匿名类的构造代码块可以用来做为匿名类的构造器来用。

{

构造方法"

Aa=newA(20);

A.Bab=newA(10).newB();

classA{

publicA(intn){}

publicclassB{}

//A.B叫做对象引用名

Aaa=newA(100);

A.Bab=aa.newB();

//对象.new的语法

publicA(intn){

newB();

//=this.newB();

平时写代码的时候会省略掉的内容

publicclassBextendsC{//C,是D的内部类

classD{

publicclassC{

  如何在内部类中引用外部类?

使用时的3种情况:

什么都不写:

在内部类查找,找不到再去外部类中找。

this:

只在内部类中查找

外部类引用.this:

只在外部类查找

classOuter{

publicvoidfun(){

Outer"

classInner{

publicvoidfun(){

System.out.println("

Inner"

publicvoidtest(){

//内部,外部,都有一个fun方法,此时fun使用的是哪个方法

fun();

publicvoidtest(){//方法不能是static类型的

Innerinner=this.newInner();

//可以省略不写的

inner.test();

publicclassTest6{

Outero=newOuter();

o.test();

//fun();

this.fun();

publicvoidtest(){

Outer.this.fun();

//fun();

//this.fun();

嵌套类

  也叫静态成员内部类

1 什么是嵌套类

  成员内部类再加上static来修饰就是嵌套类。

2 嵌套类中不能访问外部类的实例内容

  因为嵌套类是静态的,它与静态方法一样,都不能访问本类中实例的属性和实例的方法。

publicclassOuter{

publicstaticclassInner{

publicvoidfun(){

//无法从静态中打印非静态的内容

3 嵌套类基本与外部类没什么关系

  嵌套类可以访问外部类的static成员。

  其实正常类也可以访问另一个类的static成员,不过访问不了private的静态成员。

(谁访问静态成员都不需要对象来访问,所以嵌套类也没什么特权)。

  唯一特权可以是访问外部类中private的静态成员。

4 接口中可以定义嵌套类--没道理的事情

  接口中定义的类,默认是publicstatic。

也就是说定义在接口中的类都是嵌套类。

interfaceInterface{--怪异语法

publicstaticclassInner{}

5 嵌套类一般是public的

一般来说嵌套类与正常类基本没有太大的区别。

接口中必须死public的

6 外界使用嵌套类

  外部类.内部类对象名=new外部类.内部类();

  大家可以把这种方法理解为类名中包含了点,也就没有什么奇怪的了。

与使用正常样没有区别。

内部类的好处

1 隐藏代码

  成员内部类、局部内部类、匿名类都可以把一个类隐藏起来,让外界不

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

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

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