内部类
类是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础,是一种用户定义类型,也称类类型。在类中也有很多分类,今天我们来了解一下其中的一个分支——内部类
所谓内部类,就是定义在内部的类。总共分为:成员内部类、局部内部类、静态内部类和匿名内部类四种。当我第一次看到内部类的时候还在想,竟然还有这种操作,类还可以写在这里,不得不为之感到惊奇,以下内容将详细介绍四种内部类
1. 成员内部类
所谓成员内部类,类似于成员变量。级别与成员变量一样,定义在方法的外面,类的里面。成员内部类可以使用四种访问修饰符。如图所示:
对于内部类来说创建对象需要通过外部类的实例来进行创建。主要有以下以下两种方式:
可以根据自己喜欢的方式进行创建。也可以使用匿名对象的形式来直接进行创建而不生成引用。
2. 局部内部类
局部内部类,顾名思义就是定义在方法的内部,与局部变量属于同一级别。可以根据具体的情况需求来选择在方法的内部定义内部类,适当的创建局部内部类可以使逻辑与实现更加简洁明了,形式如图所示:
当然这个例子并不能体现出局部内部类有什么优势,在这里只是介绍有这么一种用法,多一个了解。具体需要怎么用,可以适当地根据场景进行运用
3. 静态内部类
静态内部类,相信看到这个词我们第一时间就会想到这个内部是被static修饰的。将内部类定义为静态的有什么用呢,这就需要了解关于static的作用了,这里将不再赘述,这里只是提到这一种类型。
将内部类定义为静态的可以直接通过外部类的类名去创建而不需要创建实例。因为被static修饰意味着只有一份,属于外部类的东西。如图所示:
其创建对象的方式进行了略微的变化
4. 匿名内部类
匿名内部类就像匿名对象一样,只需要调用或访问一次,所以不必进行创建应用或对象。匿名内部类的适用范围很广泛,可以用来重写接口中的抽象方法然后直接调用。匿名内部类的发生可以简单的理解为继承关系,其中内部类为子类。所以匿名内部类重现接口方法时,即发生了多态现象。
匿名内部类的创建语法一般为:
类名/接口名 引用 = new 构造(){具体实现,方法体,重写等};(
这里的分号需要注意不可以不写,因为属于创建对象的语法)
如图所示:
最后输出结果为11
以上是对四种内部类进行的简单介绍,内部类的使用需要注意以下几点:
- 内部类可以自由访问外部类的是所有成员(包括private修饰的变量与方法)
- java1.7及以前的版本中,内部类访问外部局部变量时,该变量必须被final 修饰,否则不能进行使用
java1.8版本开始,可以不用适用final修饰,自动添加。允许直接使用
个人感觉内部类只有在具体的项目中的作用体现的会更加明显,一般的小例子体现不出其优势,但并不表示内部类不重要。知识有限,目前只了解到这么多,欢迎进行补充与指正