局部内部类的使用
- 说明:局部内部类是定义在外部类的局部位置,比如方法中,并且有类名。
- 可以直接访问外部类的所有成员,包含私有的。
- 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用
final
修饰,因为局部变量也可以使用final
。 - 作用域:仅仅在定义它的方法或代码块中。
- 局部内部类—访问---->外部类的成员【访问方式:直接访问】
- 外部类—访问---->局部内部类的成员
访问方式:创建对象,再访问(注意:必须在作用域内)
(外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可)
public class LocalInnerClass {
public static void main(String[] args) {
//测试
Outer02 outer02 = new Outer02();
outer02.m1();
}
}
class Outer02 {//外部类
private int n1 = 100;
private void m2() {
System.out.println("Outer02 m2()");
} //私有方法
public void m1() {//方法
//1.局部内部类是定义在外部类的局部位置,通常在方法
//3.不能添加修饰符,但是可以使用final 修饰
//4.作用域:仅仅定义在它的方法或代码块中
String name = "xdr";
final class Inner02 { //局部内部类(本质化仍然还是一个类)
//2. 可以直接访问外部类的所有成员,包含私有的
public void f1() {
//5.局部内部类可以直接访问外部类的成员,如下:访问 外部类 n1 和 m2
System.out.println("n1" + n1);
m2();
}
}
{//代码块,局部内部类
class Inner03 {
}
}
//6. 外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可
Inner02 inner02 = new Inner02();
inner02.f1();
}
}
注意:
(1)局部内部类定义在方法中/代码块
(2)作用域在方法体或者代码块中
(3)本质仍然是一个类
- 外部其他类—不能访问----->局部内部类(因为局部内部类地位是一个局部变量)
- 如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,则可以使用【
外部类名.this.成员
】去访问
public class LocalInnerClass {
public static void main(String[] args) {
//测试
Outer02 outer02 = new Outer02();
outer02.m1();
System.out.println("Outer02 hashcode = " + outer02);
}
}
class Outer02 {//外部类
private int n1 = 100;
private void m2() {
System.out.println("Outer02 m2()");
} //私有方法
public void m1() {//方法
//1.局部内部类是定义在外部类的局部位置,通常在方法
//3.不能添加修饰符,但是可以使用final 修饰
//4.作用域:仅仅定义在它的方法或代码块中
String name = "xdr";
final class Inner02 { //局部内部类(本质化仍然还是一个类)
//2. 可以直接访问外部类的所有成员,包含私有的
private int n1 = 200;
public void f1() {
//5.局部内部类可以直接访问外部类的成员,如下:访问 外部类 n1 和 m2
System.out.println("n1=" + n1);
m2();
System.out.println("==================");
//7.如果外部类和局部内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,
// 则可以使用【`外部类名.this.成员`】去访问
// 解读:Outer02.this 本质就是外部类的对象,即哪个对象调用了m1,Outer02.this 就是那个对象
System.out.println("n1=" + n1 + " 外部类的n1= " + Outer02.this.n1);
//验证
System.out.println("Outer02.this hashcode = " + Outer02.this);
}
}
{//代码块,局部内部类
class Inner03 {
}
}
//6. 外部类要使用局部类时,在外部类在方法中,可以创建 Inner02 实例对象,然后调用方法即可
Inner02 inner02 = new Inner02();
inner02.f1();
}
}