java内部类深入讲解.docx

上传人:b****3 文档编号:11778119 上传时间:2023-06-02 格式:DOCX 页数:15 大小:16.98KB
下载 相关 举报
java内部类深入讲解.docx_第1页
第1页 / 共15页
java内部类深入讲解.docx_第2页
第2页 / 共15页
java内部类深入讲解.docx_第3页
第3页 / 共15页
java内部类深入讲解.docx_第4页
第4页 / 共15页
java内部类深入讲解.docx_第5页
第5页 / 共15页
java内部类深入讲解.docx_第6页
第6页 / 共15页
java内部类深入讲解.docx_第7页
第7页 / 共15页
java内部类深入讲解.docx_第8页
第8页 / 共15页
java内部类深入讲解.docx_第9页
第9页 / 共15页
java内部类深入讲解.docx_第10页
第10页 / 共15页
java内部类深入讲解.docx_第11页
第11页 / 共15页
java内部类深入讲解.docx_第12页
第12页 / 共15页
java内部类深入讲解.docx_第13页
第13页 / 共15页
java内部类深入讲解.docx_第14页
第14页 / 共15页
java内部类深入讲解.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

java内部类深入讲解.docx

《java内部类深入讲解.docx》由会员分享,可在线阅读,更多相关《java内部类深入讲解.docx(15页珍藏版)》请在冰点文库上搜索。

java内部类深入讲解.docx

java内部类深入讲解

1内部类概述

/*

内部类概述:

把类定义在其他类的内部,这个类就被称为内部类。

举例:

在类A中定义了一个类B,类B就是内部类。

内部的访问特点:

A:

内部类可以直接访问外部类的成员,包括私有。

B:

外部类要访问内部类的成员,必须创建对象。

*/

classOuter{

privateintnum=10;

classInner{

publicvoidshow(){

System.out.println(num);

}

}

publicvoidmethod(){

//找不到符号

//show();

Inneri=newInner();

i.show();

}

}

classInnerClassDemo{

publicstaticvoidmain(String[]args){

}

}

2内部类位置

/*

内部类位置

成员位置:

在成员位置定义的类,被称为成员内部类。

局部位置:

在局部位置定义的类,被称为局部内部类。

成员位置:

在成员位置定义的类,被称为成员内部类。

*/

classOuter{

privateintnum=10;

//成员位置

/*

classInner{

}

*/

publicvoidmethod(){

//局部位置

classInner{

}

}

}

classInnerClassDemo2{

publicstaticvoidmain(String[]args){

}

}

3成员内部类

/*

成员内部类:

如何直接访问内部类的成员。

外部类名.内部类名对象名=外部类对象.内部类对象;

*/

classOuter{

privateintnum=10;

classInner{

publicvoidshow(){

System.out.println(num);

}

}

}

classInnerClassDemo3{

publicstaticvoidmain(String[]args){

//需求:

我要访问Inner类的show()方法

//Inneri=newInner();

//i.show();

//格式:

外部类名.内部类名对象名=外部类对象.内部类对象;

Outer.Inneroi=newOuter().newInner();

oi.show();

}

}

4成员内部类修饰符

/*

成员内部类的修饰符:

private为了保证数据的安全性

static为了方便访问数据

注意:

静态内部类访问的外部类数据必须用静态修饰。

案例:

我有一个人(人有身体,身体内有心脏。

classBody{

privateclassHeart{

publicvoidoperator(){

System.out.println("心脏搭桥");

}

}

publicvoidmethod(){

if(如果你是外科医生){

Hearth=newHeart();

h.operator();

}

}

}

按照我们刚才的讲解,来使用一下

Body.Heartbh=newBody().newHeart();

bh.operator();

//加了private后,就不能被访问了,那么,怎么玩呢?

Bodyb=newBody();

b.method();

*/

classOuter{

privateintnum=10;

privatestaticintnum2=100;

//内部类用静态修饰是因为内部类可以看出是外部类的成员

publicstaticclassInner{

publicvoidshow(){

//System.out.println(num);

System.out.println(num2);

}

publicstaticvoidshow2(){

//System.out.println(num);

System.out.println(num2);

}

}

}

classInnerClassDemo4{

publicstaticvoidmain(String[]args){

//使用内部类

//限定的新静态类

//Outer.Inneroi=newOuter().newInner();

//oi.show();

//oi.show2();

//成员内部类被静态修饰后的访问方式是:

//格式:

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

Outer.Inneroi=newOuter.Inner();

oi.show();

oi.show2();

//show2()的另一种调用方式

Outer.Inner.show2();

}

}

5局部内部类

/*

局部内部类

A:

可以直接访问外部类的成员

B:

在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

面试题:

局部内部类访问局部变量的注意事项?

A:

局部内部类访问局部变量必须用final修饰

B:

为什么呢?

局部变量是随着方法的调用而调用,随着调用完毕而消失。

而堆内存的内容并不会立即消失。

所以,我们加final修饰。

加入final修饰后,这个变量就成了常量。

既然是常量。

你消失了。

我在内存中存储的是数据20,所以,我还是有数据在使用。

*/

classOuter{

privateintnum=10;

publicvoidmethod(){

//intnum2=20;

//finalintnum2=20;

classInner{

publicvoidshow(){

System.out.println(num);

//从内部类中访问本地变量num2;需要被声明为最终类型

System.out.println(num2);//20

}

}

//System.out.println(num2);

Inneri=newInner();

i.show();

}

}

classInnerClassDemo5{

publicstaticvoidmain(String[]args){

Outero=newOuter();

o.method();

}

}

6匿名内部类

/*

匿名内部类

就是内部类的简化写法。

前提:

存在一个类或者接口

这里的类可以是具体类也可以是抽象类。

格式:

new类名或者接口名(){

重写方法;

}

本质是什么呢?

是一个继承了该类或者实现了该接口的子类匿名对象。

*/

interfaceInter{

publicabstractvoidshow();

publicabstractvoidshow2();

}

classOuter{

publicvoidmethod(){

//一个方法的时候

/*

newInter(){

publicvoidshow(){

System.out.println("show");

}

}.show();

*/

//二个方法的时候

/*

newInter(){

publicvoidshow(){

System.out.println("show");

}

publicvoidshow2(){

System.out.println("show2");

}

}.show();

newInter(){

publicvoidshow(){

System.out.println("show");

}

publicvoidshow2(){

System.out.println("show2");

}

}.show2();

*/

//如果我是很多个方法,就很麻烦了

//那么,我们有没有改进的方案呢?

Interi=newInter(){//多态

publicvoidshow(){

System.out.println("show");

}

publicvoidshow2(){

System.out.println("show2");

}

};

i.show();

i.show2();

}

}

classInnerClassDemo6{

publicstaticvoidmain(String[]args){

Outero=newOuter();

o.method();

}

}

7内部类面试题

/*

面试题:

要求请填空分别输出30,20,10。

注意:

1:

内部类和外部类没有继承关系。

2:

通过外部类名限定this对象

Outer.this

*/

classOuter{

publicintnum=10;

classInner{

publicintnum=20;

publicvoidshow(){

intnum=30;

System.out.println(num);

System.out.println(this.num);

//System.out.println(newOuter().num);

System.out.println(Outer.this.num);

}

}

}

classInnerClassTest{

publicstaticvoidmain(String[]args){

Outer.Inneroi=newOuter().newInner();

oi.show();

}

}

8内部类开发中的使用

/*

匿名内部类在开发中的使用

*/

interfacePerson{

publicabstractvoidstudy();

}

classPersonDemo{

//接口名作为形式参数

//其实这里需要的不是接口,而是该接口的实现类的对象

publicvoidmethod(Personp){

p.study();

}

}

//实现类

classStudentimplementsPerson{

publicvoidstudy(){

System.out.println("好好学习,天天向上");

}

}

classInnerClassTest2{

publicstaticvoidmain(String[]args){

//测试

PersonDemopd=newPersonDemo();

Personp=newStudent();

pd.method(p);

System.out.println("--------------------");

//匿名内部类在开发中的使用

//匿名内部类的本质是继承类或者实现了接口的子类匿名对象

pd.method(newPerson(){

publicvoidstudy(){

System.out.println("好好学习,天天向上");

}

});

}

}

9匿名内部类面试题

/*

匿名内部类面试题:

按照要求,补齐代码

interfaceInter{voidshow();}

classOuter{//补齐代码}

classOuterDemo{

publicstaticvoidmain(String[]args){

Outer.method().show();

}

}

要求在控制台输出”HelloWorld”

*/

interfaceInter{

voidshow();

//publicabstract

}

classOuter{

//补齐代码

publicstaticIntermethod(){

//子类对象--子类匿名对象

returnnewInter(){

publicvoidshow(){

System.out.println("HelloWorld");

}

};

}

}

classOuterDemo{

publicstaticvoidmain(String[]args){

Outer.method().show();

/*

1:

Outer.method()可以看出method()应该是Outer中的一个静态方法。

2:

Outer.method().show()可以看出method()方法的返回值是一个对象。

又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。

*/

}

}

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2