一、定义内部类的格式
内部类就是在一个类中再定义一个类。
class Outer {
public class Inner {
// 代码
}
}
二、内部类的访问特点
- 内部类可以直接访问外部类的成员包括私有修饰的。
- 外部类要想访问内部类的成员,必须要创建对象。
(1)成员内部类
定义位置:和类中的成员变量位置相同
/**
* 外部类
*/
class Outer {
private int numb = 10;
String str = "外部嚯嚯嚯";
/**
* 内部类
*/
public class Inner {
private int numb1 = 20;
String str1 = "内部嚯嚯嚯";
public void show() {
// 内部类直接访问外部类的成员
System.out.println(numb);
System.out.println(str);
}
}
/**
* 外部类普通方法
*/
public void method() {
//想要访问内部类的东西必须要创建对象
Inner i = new Inner();
System.out.println(i.numb1);
System.out.println(i.str1);
i.show();
}
}
public class Demo02{
public static void main(String[] args) {
Outer outer = new Outer();
outer.method();
}
}
结果:
(2)局部内部类
定义位置:在方法内部
class Outer {
private int num = 10;
public void method() {
int num1 = 20;
/**
* 局部内部类定义在方法中
*/
class Inner {
public void show() {
System.out.println(num);
System.out.println(num1);
}
}
// 也是要创建对象才能用
Inner i = new Inner();
i.show();
}
}
public class Demo02{
public static void main(String[] args) {
Outer outer = new Outer();
outer.method();
}
}
结果:
-
局部内部类方式
-
局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
-
该类可以直接访问外部类的成员,也可以访问方法内的局部变量
-
三、匿名内部类
匿名内部类的定义前提是:存在一个类或者接口
-
本质:是一个继承了该类或者实现了该接口的子类匿名对象
interface Inter{
void method();
}
class Test{
public static void main(String[] args){
new Inter(){
@Override
public void method(){
System.out.println("我是匿名内部类");
}
}.method(); // 直接调用方法
}
}