java 局部内部类
java 局部内部类
- 一、位置
- 二、特点
- 三、局部内部类的实例化
- 四、代码实例一:演示特点一
- 五、代码实例二:演示特点二和特点三
- 六、代码实例三:演示局部内部类的实例化
同步文章(更好的排版):
java 局部内部类
一、位置
定义在外部类的方法中。局部内部类的作用范围仅限此方法中
二、特点
- 局部内部类不能使用任何访问修饰符
- 如果局部内部类所在方法是非静态方法,则此局部内部类可以直接访问外部类的属性和方法
- 如果局部内部类所在方法是静态方法,则此局部内部类就只能直接访问外部类的静态属性和方法
- 局部内部类可以直接访问局部变量,局部变量必须使用 final 修饰,jdk1.8 之后,final 关键字可以省略,对象的生命周期长于局部变量
- 局部内部类不能声明静态成员,但可以使用静态常量
三、局部内部类的实例化
局部内部类的实例化,需要在对应的方法中进行
四、代码实例一:演示特点一
public class JuBuOuter {
//外部类的成员方法
public void show(){
//局部内部类
//局部内部类不能使用任何访问修饰符
class Inner{}
public class Inner{}
protected class Inner{}
private class Inner{}
}
}
五、代码实例二:演示特点二和特点三
public class JuBuOuter02 {
//外部类的非静态成员属性
private String name = "公众号:牧牧川";
//外部类的静态成员属性
private static int age = 18;
//外部类的非静态成员方法
public void t1(){
//局部内部类
class Inner01{
//局部内部类的方法
//如果局部内部类所在方法是非静态方法,则此局部内部类可以直接访问外部类的属性和方法
public void show(){
System.out.println("我是非静态成员方法中的内部类");
System.out.println(name);
System.out.println(age);
}
}
}
//外部类的静态成员方法
public static void t2(){
//局部内部类
class Inner02{
//局部内部类的方法
//如果局部内部类所在方法是静态方法,则此局部内部类就只能直接访问外部类的静态属性和方法
public void show(){
System.out.println("我是静态成员方法中的内部类");
// System.out.println(name);
System.out.println(age);
}
}
}
}
六、代码实例三:演示局部内部类的实例化
public class JuBuOuter02 {
//外部类的非静态成员属性
private String name = "公众号:牧牧川";
//外部类的静态成员属性
private static int age = 18;
//外部类的非静态成员方法
public void t1(){
//局部内部类
class Inner01{
//局部内部类的方法
//如果局部内部类所在方法是非静态方法,则此局部内部类可以直接访问外部类的属性和方法
public void show(){
System.out.println("-----我是非静态成员方法中的局部内部类-----");
System.out.println(name);
System.out.println(age);
}
}
//局部内部类的实例化,需要在对应方法中进行
Inner01 inner01 = new Inner01();
inner01.show();
}
//外部类的静态成员方法
public static void t2(){
//局部内部类
class Inner02{
//局部内部类的方法
//如果局部内部类所在方法是静态方法,则此局部内部类就只能直接访问外部类的静态属性和方法
public void show(){
System.out.println("-----我是静态成员方法中的局部内部类----");
// System.out.println(name);
System.out.println(age);
}
}
//局部内部类的实例化,需要在对应方法中进行
Inner02 inner02 = new Inner02();
inner02.show();
}
}
public class TestJuBuOuter02 {
public static void main(String[] args) {
//创建外部类对象
JuBuOuter02 juBuOuter02 = new JuBuOuter02();
//通过外部类对应的方法,调用对应的局部类
juBuOuter02.t1();
juBuOuter02.t2();
}
}