局部内部类概念
- 可以直接访问内部类的所有成员,包含私有的
- 不能添加访问修饰符,因为它的地位就是一个局部变量。局部变量是不能使用修饰符的。但是可以使用final修饰,因为局部变量也可以使用final
- 作用域:仅仅在定义它的方法或代码块中
- 局部内部类–>访问—>外部类的成员【访问方式:直接访问】
- 外部类—访问—>局部内部类的成员
访问方式:创建对象,再访问(注意:必须在作用域内)
- 外部其他类—不能访问---->局部内部类(因为 局部内部类地位是一个局部变量)
- 如果外部类和局部内部类的成员重名时,默认遵守就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
System.inout.println(“外部类的n2=” + 外部类名.this.n2);
局部内部类代码举例
package com.tao.innerclass;
/**
* Create By 刘鸿涛
* 2021/12/26 18:00
*/
public class LocallnnerClass {
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修饰,因为局部变量也可以使用final
//4.作用域:仅仅在定义它的方法或代码块中
String name = "xxx";
class Inner02{ //局部内部类(本质仍然是一个类)
//2.可以直接访问外部类的所有成员,包含私有的
private int n1 = 800;
public void f1(){
//5.局部内部类可以直接访问外部类的成员,比如下面
//7.如果外部类和局部内部类的成员重名时,默认遵守就近原则,如果想访问外部类的成员,则可以
// 使用外部类名.this.成员 去访问
//Outer02.this 本质就是外部类的对象,即哪个对象调用了m1,Outer02.this就是哪个对象
System.out.println("n1 = " + n1 + "外部类的 n1 = \t" + Outer02.this.n1);
System.out.println("Outer02.this. hashcode = " + Outer02.this);
//内部类可以访问本类私有方法
m2();
}
}
//6.外部类在方法中,可以创建Inner02对象,然后调用方法即可
Inner02 inner02 = new Inner02();
inner02.f1();
//局部内部类继承局部内部类
class Inner03 extends Inner02{
}
}
{//代码块->中的内部类
class Inner03{
}
}
}
局部内部类结论
- 局部内部类定义在方法中/代码块
- 作用域在方法体或者代码块中
- 本质仍然是一个类
- 可以把局部内部类想象为一个局部变量