内部类是什么类?

19 篇文章 1 订阅

目录

一、成员内部类

二、静态内部类

三、方法内部类(局部内部类)

四、匿名内部类(lambda表达式的前身)


内部类:所谓内部类,就是将类结构的定义套在另一个类的内部,内部类也属于一种封装。

内部类分为四种:成员内部类、静态内部类、方法内部类、匿名内部类。

一、成员内部类

成员内部类:直接定义在类中,不加任何修饰符(static)定义的类。

成员内部类的使用方法:

①成员内部类的创建需要依赖外部类对象,在没有外部类对象之前,无法创建成员内部类对象。

②内部类是一个相对独立的实体,与外部类不是 is-a 关系。

③内部类可以直接访问外部类的元素和方法(包括私有域),外部类必须通过内部类的对象来访问内部类的元素和方法(包括私有域)。

④成员内部类对象的创建

  • 外部类的内部创建

内部类名称 内部类引用=new 内部类();

  • 外部类的外部创建——内部类要对外部可见(访问权限问题)

外部类名称.内部类 引用=new 外部类().new 内部类();

由于成员内部类Inner是套在Outter之中的,就相当于Outter的一个成员变量,因此访问Inner类,就使用Outter.Inner ,成员内部类是需要依附外部类,先要产生外部类对象才能产生内部类对象,new Outter() -> 产生一个外部类对象,然后通过产生好的外部类对象再产生内部类对象new Inner() 。

成员内部类特点:内部类和外部类可以方便的互相访问彼此的private域。

内部类访问外部类的私有域直接访问,原因就是内部类中隐藏了一个外部类对象:

关于成员内部类的几个细节问题?

1、对于成员内部类来说,能否定义一个静态变量?答:不能,外部类访问成员内部类需要通过内部类的对象来访问,而静态变量没有对象也能用,相互矛盾。

2、对于外部类来说,能否在外部类的静态方法中使用成员内部类?答:不能,相当于在静态方法中调用成员变量。

二、静态内部类

静态内部类:定义在类中,使用static修饰的内部类就是静态内部类,静态内部类不需要依赖外部类对象。

创建静态内部类对象:

  • 外部类的内部

就和普通类的用法相同

为何成员方法和静态方法都能创建成员内部类对象?答:类比类中的静态变量,没有类的对象就能使用,类的静态方法可以调用,成员方法更可以。

  • 外部类的外部

外部类.内部类 引用=new 外部类.内部类();

此时不需要产生外部类对象

静态内部类能否拥有成员变量? 答:可以

静态内部类能否访问外部类的成员变量?答:不能,外部类的成员变量有对象才能访问,此时内部类就没有外部类对象,因此无法直接访问,要访问可以通过new一个外部类对象来访问。

三、方法内部类(局部内部类)

方法内部类:直接定义在方法内部的类,不允许使用任何访问修饰符,对外部完全隐藏(出了这个方法,这个类就没了)。

①方法内部类无法定义static域,除此之外和成员内部类的用法基本相同

②方法内部类中若使用了方法的形参,该形参为隐式的final声明 (JDK8之后,JDK8之前,方法内部类若使用了形参,形参必须使用final声明)

四、匿名内部类(lambda表达式的前身)

匿名内部类:匿名内部类是方法内部类的特殊版本,直接不写类名称。

匿名内部类遵从方法内部类的所有要求,默认会继承一个类或实现一个接口

之前的接口传参方式:

使用匿名内部类:

  

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怎样让大排不硬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值