内部类 java_java内部类详解

一:内部类基础

定义:java中,将一个类定义在一个类内部的类叫内部类。

位置:1->成员位置处  2->方法体内  3->方法参数位置

种类:成员内部类、局部内部类、匿名内部类、静态内部类

二:成员内部类

定义在成员位置处的类。

3a69bff4dacad8d1cb182affa045b8b1.png

Circle类称为外部类,成员内部类可以无条件访问外部类的所有成员属性和方法(包括private成员和静态成员)。

f60a71ca0afb375d02e34d27a1027715.png

当成员内部类和外部类有同名成员变量或方法时,默认访问成员内部类的成员。

若要访问外部类成员,需要以下形式进行访问。

外部类.this.成员变量

外部类.this.成员方法

外部类访问内部类成员,需要创建内部类对象进行访问。

1a7d9af0570096f147fea38745ba2b2b.png

创建内部类对象的方式:

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

2:Outer outer = new Outer();

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

成员内部类可以被public、protected、默认访问修饰符、private修饰。

public:本类、同包类、子类、不同包

protected:本类、同包类、子类(不同包中的子类亦可)

默认:本类、同包类

private:本类

外部类只可以被public和默认访问修饰符修饰,且同一文件下至多有一个public修饰的类。

三:局部内部类

定义在方法体内部的类,访问权限仅限于方法内。

a44b5c57b2ce5ed5d4e1b751ac82ffc7.png

注:局部内部类就像方法中的局部变量一样,不能有public、protected、private和static修饰符。

四:匿名内部类

匿名内部类就是没有名字的内部类。

因为没有名字,因此每次调用只能使用一次,常常用来简化代码编写。

使用匿名内部类有个前提条件:必须继承父类或实现一个接口,或者继承父类且父类方法可重写。

例1:不使用匿名内部类

c4dd0cc58bb2e673ac7370a128646ece.png

例2:在抽象类上使用匿名内部类

6b892806398dda28555d3b22749354d0.png

例3:在接口上使用匿名内部类

5c22ebf51d591b784b8ac00301890ffa.png

例3:在可继承类且父类方法可重写的类上使用匿名内部类

42ae2776865f12e8e3a21e1091ba8179.png

匿名内部类不能有访问修饰符和关键字static修饰,匿名内部类是唯一没有构造器的类,多数情况下用在接口回调。

五:静态内部类

定义在类中,并且用static修饰符修饰。

和类的静态成员类似,在没有外部类的对象情况下,可以创建内部类的对象,创建方式如下:

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

静态内部类不能使用外部类的非ststic成员属性和方法。

例:

503f9190c4d7e9958cfe831e14fe7f6c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值