java中的内部类

一、内部类的定义:

内部类(Inner Class)就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

二、为什么使用内部类:

1、内部类提供了更好的封装,可以吧内部类隐藏在外部类中,不允许同包的其他类进行访问;

2、内部类的方法可以直接该类定义所在的作用域中的所有数据,包括私有数据;

3、内部类所实现的功能,使用外部类也可以实现,只是有时(当定义一个回调函数)使用内部类更加方便。

三、内部类可分为几种:

1、静态内部类 static inner class(also called nested class)

2、成员内部类 member inner class

3、局部(方法)内部类 local inner class

4、匿名内部类 anonymous inner class


被编译为一个完全独立的.class文件,名称为Outer$Inner.Class的形式

1、声明在类的成员位置(成员内部类)

1.1 内部类能不能访问外部类的成员变量?可以

1.2 内部类的方法怎么调用?

因为内部类在外部类的成员位置,所以要通过外部类的对象来调用

Outer.Inner inner=new Outer().new Inner();

1.3 内部类的修饰符问题:

一般用private修饰,本来这个内部类就是只给外部类用的,而且可能只用一次。

1.4在外部类中创建内部类实例:

this.new Innerclass();

1.5在外部类之外创建内部类实例:

(new Outerclass()).newInnerclass();

1.6在内部类访问外部类的成员:

Outerclass.this.member

2、声明在类的成员位置,用static修饰的(静态内部类)

2.1静态内部类只能访问外部类的静态成员

2.2静态内部类可以有非静态的方法

2.3怎么调用静态内部类(内部类的实例)?

Outer.Inner2 inner2=new Outer.Inner2();

2.4内部类的修饰符问题:

一般用public修饰,这个是为了访问方便。

3、声明在类的局部位置(局部(方法)内部类 )

3.1 在方法中要new这个内部类的对象并调用

3.2如果局部内部类中要使用外部类的方法的局部变量,需要在变量前面加final, 为什么?

 因为局部变量使用完毕后很快就消失了,而内部类所在的堆内存的数据并不会马上就消失,如果内部类需要用到该变量,

 但是该变量消失了,这样就会出问题。所以必须要在变量之前加final,这样加载到堆内存中的就是一个常量。

3.2像局部变量一样,不能被public ,protected,private和static修饰。

3.3局部内部类只能在方法中使用,即只能在方法中生成局部内部类的实例并调用其方法。

4、匿名内部类(常用)(匿名内部类)

声明在类的局部位置,可以不起名字。

4.1前提:得有一个类(抽象类)或者接口

4.2格式:new 抽象类/接口(){重写方法}

表面上是new抽象类/接口,实际上是偷偷地创建了抽象类的子类/接口的实现类,

用得最多的就是抽象类/接口作为形参的时候。

4.3不使用关键字class,extends,implement,没有构造方法。

4.4匿名内部类的使用的比较多,通常是作为一个方法参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值