欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java笔记之内部类

程序员文章站 2022-04-14 12:29:24
...

前言

内部类主要用于封装。任何内部类都会被编译成独立的class文件,class文件名:外部类$内部类;内部类用于封装,所以很少被外部调用。

正文

内部类

1.概念:在一个类中定义另外一个类。内部类包含在它所定义的外部类的类体中
2.分类:按照内部类定义的位置分类,可分为静态内部类,成员内部类,匿名内部类,局部内部类。

静态内部类

在类体中定义,以静态成员的形式出现的类。
1)语法:
static class 类名{
类体
}
2)特性:
1))在静态内部类中访问外部类的成员,该成员必须是为静态的。但可以使用外部类的对象引用来访问外部类的非静态成员。
2))在静态内部类中访问外部类的方法,该方法必须是为静态的。但可以使用外部类的对象引用来访问外部类的非静态方法。
3))在外部类访问内部类的静态方法,使用内部类类名.方法名。访问内部类的非静态方法使用内部类引用.方法名。代码示例:
<script src="https://code.csdn.net/snippets/267803.js" type="text/javascript"></script>
4))静态内部类的实例化方式:外部类的类名.内部类的类名 变量名 = new 外部类类名.内部类名();
5))静态内部类可被四大访问控制符所修饰

成员内部类

在类中定义的类,该类以成员的形式出现,和类的属性和方法同级
1)语法:
class 类名{
类体
}
2)特性:
1))成员内部类可访问外部类的静态成员和非静态成员.
2))成员内部类无法再外面的类直接实例化,但可通过内部类所在的外部类中提供一个返回内部类实例的方法。示例如下:
<script src="https://code.csdn.net/snippets/267811.js" type="text/javascript"></script>
3))成员内部类可被四大访问控制符所修饰
4))成员内部类可定义为抽象的成员内部类
5))成员内部类可继承为抽象的成员内部类
6))成员内部类不能包含静态方法。外部类访问成员内部类的成员,只能通过内部类的引用访问。
局部

局部内部类

它可定义在一个方法中,不能被static修饰,相当于一条java语句。
1)语法:
放回值 方法名(参数列表){
class 类名{
类体
}
}
2)特性:
1))局部内部类访问局部变量时,局部变量需要final修饰;局部内部类可直接访问成员变量
2))局部内部类进行实例化是有范围的,只能在当前的这个方法中进行实例化。
3))局部内部类和局部变量一样的存在作用域。当方法执行完毕后,局部内部类的实例对象会被销毁。局部内部类的作用域存在于方法中。
4))局部内部类只能被【Default】修饰,另外还可被abstract,final修饰。

匿名内部类(重点)

可以定义在类的任何位置。犹如一句话。同时它无类名
1)语法:
类名 引用=new 类名(){
类体
}
2)特性:
1))匿名内部类中的{}是内部类的类体。类体中可定义属性和方法
2))匿名内部类无法定义构造器,因为匿名内部类没有类名。
3))匿名内部类的定义首先要创建对象,在创建对象后加入类体{}。
4))(重点)匿名内部类继承抽象类和实现接口时,只需在类体中实现其抽象方法。
该使用方式,在某种意义上使得抽象类和接口可实例化。
(这种方式也可以使用基类的引用指向子类的对象,是多态的表现形式之一)

总结

匿名内部类,本人是使用比较多的,在使用集合的comparator比较器时候,常常使用匿名内部类解决问题。