Java中的内部类、枚举

内部类

内部类是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。

场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。

如:汽车里面有一个发动机,就可以把发动机类定义在汽车类里面

内部类有四种形式:

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类

是类中的一个普通成员,类似普通的成员变量、成员方法。
在这里插入图片描述
成员内部类的成分都有:成员变量(普通、静态static成员「JDK16才开始支持」)、成员方法

访问成员内部类的方法:内部类依赖于外部类

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

成员内部类中访问其他成员的特点:

  1. 成员内部类可以直接访问外部类的实例成员、静态成员;
  2. 当如果内部类和外部类中有相同名称的变量,使用格式:外部类名.this
    在这里插入图片描述

静态内部类

有static修饰的内部类,属于外部类自己持有
在这里插入图片描述
静态内部类的成分:类有的它都有

访问静态内部类的方法:由于是静态可以直接用.调用出来

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

静态内部类中访问其他成员的特点:

  1. 成员内部类只能直接访问外部类的静态成员,不能直接方法外部类的实例成员;
    在这里插入图片描述

局部内部类(不重要)

局部内部类是定义在方法中、代码块中、构造器等执行体中
在这里插入图片描述

匿名内部类(重要)

什么是匿名内部类

一种特殊的局部内部类;所谓匿名:指的是不需要为这个类声明名字
在这里插入图片描述
在这里插入图片描述

编译器遇到匿名内部类:

  1. 特点:把这个匿名内部类编译成一个子类,然后会立即创建一个类对象出来
  2. 作用:用于更方便的创建一个子类对象

在这里插入图片描述左边是Java类代码,右边是编译后的class文件

使用场景

通常作为一个参数传输给方法
在这里插入图片描述
可以改写为:直接在调用函数的时候创建匿名内部类
在这里插入图片描述

在这里插入图片描述

枚举类

什么是枚举类

是一种特殊的类:是一种固定数量的类
在这里插入图片描述
枚举类中的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开;
这些名称,本质是常量,每个常量都会记住枚举类的一个对象。

反编译可以看到
在这里插入图片描述

在这里插入图片描述

枚举类的特点

在这里插入图片描述

  • 枚举类的第一行只能罗列名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
  • 枚举类的构造器都是私有的(写不写都只是私有的),因此,枚举类对外不能创建对象。
  • 枚举类都是最终类,不可以被继承
  • 枚举类中,从第二行开始,可以定义类的其他各种成员
  • 编译器为枚举类新增类几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法

枚举类提供的一些额外API

在这里插入图片描述

拓展:抽象枚举

在枚举中添加了一个抽象方法
在这里插入图片描述
构建对象的时候要重写抽象方法

使用枚举类实现单例设计模式

在这里插入图片描述

常见应用场景

用来表示一组信息,然后作为参数进行传输。
做信息标志和分类
在这里插入图片描述

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值