一、内部类是什么
(一)内部类概念
把类定义在另一个类的内部,该类就被称为内部类。
举例:在类A中定义了一个类B,类B就是内部类。
(二)内部类的访问特点:
A:内部类可以直接访问外部类的成员,包括私有。
B:外部类要访问内部类的成员,必须创建对象。
二、内部类的分类
Java的内部类大致分为两种,分别为:
a. 成员内部类:在成员位置定义的类,被称为成员内部类。
b. 局部内部类:在局部位置定义的类,被称为局部内部类。
下面分别介绍这两种内部类的使用和注意细节!
三、成员内部类
(一)成员内部类的简单使用
现有一个如下成员内部类
1 | class Outer{ |
访问格式为:
1 | 外部类名.内部类名 对象名 = new 外部类名.new 内部类名(); |
测试:
1 | public class InnerClassDemo { |
(二)使用private修饰的成员内部类
1 | class Outer2{ |
当内部类被private修饰后,必须在外部类中提供一个供操作内部类的方法(如此处的method()方法)
测试:
1 | public class InnerClassDemo2 { |
(三)使用static修饰的成员内部类
1 | class Outer3{ |
访问格式为:
1 | 外部类名.内部类名 对象名 = new 外部类名.内部类名(); |
测试:
1 | public class InnerClassDemo3 { |
使用static修饰成员内部类后的注意事项:
1 | A: 使用static修饰成员内部类后,访问的外部类数据必须用静态修饰 |
总结:
1 | 成员内部类的修饰符: |
四、局部内部类
1 | class Outer4{ |
测试:
1 | public class InnerClassDemo4 { |
注意事项:
1 | 局部内部类 |
局部内部类访问局部变量为什么需要加final进行修饰:
局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因
五、匿名内部类
匿名内部类其实是局部内部类的一种特殊形式。
格式:
new 类名或者接口名(){
重写方法;
}
本质是什么呢?
本质是一个继承了该类或者实现了该接口的子类匿名对象。
1 | interface Person{ |
使用匿名内部类:
1 | public class InnerClassDemo5 { |
六、关于内部类常见的面试题
(面试题一)
要求请填空分别输出30,20,10
1 | class Outer { |
答案如下:
1 | System.out.println(num); |
(面试题二)
按照要求,补齐代码,要求在控制台输出”HelloWorld”
1 | interface Inter { |
答案如下:
1 | interface Inter { |
Java新手,若有错误,欢迎指正!