内部类:局部内部类
程序员文章站
2022-05-22 09:02:15
...
package org.lgy.study.innerclass; public class LocalInnerClass{ public static void main(String[] args){ //如果需要在局部内部类中访问所在方法的局部变量,则必须将局部变量声明为final final int x = 1; //局部内部类仅在该方法里有效,由于局部内部类不能在外部类的方法以外的地方使用, //因此局部内部类也不能使用访问控制符和static修饰符修饰。 //如果需要用局部内部类定义变量、创建实例、派生子类,那么都只能在局部内部类所在的方法内进行 class InBase{ //局部内部类中不能定义static成员 //static String str = "123"; private String var = "***"; private void method1(){ System.out.println("method1 in InBase"); } } class InSub extends InBase{ private int var = 1; private void method1(){ System.out.println("method1 in InSub"); } } InBase inBase = new InSub(); //即使内部类的成员变量和成员方法是私有的,也可以直接访问 System.out.println(inBase.var); inBase.method1(); } }
package org.lgy.study.innerclass; public class LocalInnerClass{ //method1是外部类的非静态成员方法,当调用method1是已经创建了外部类的对象, //所以method1中既可以访问外部类的非静态成员,也可以访问外部类的静态成员, //所以在method1的局部内部类中也既可以访问外部类的非静态成员,也可以访问外部类的静态成员。 public void method1(){ int a = 1; class Inner1{ //局部内部类中不能定义static成员 //static String str; public void method1(){ //由于局部内部类所在方法是非静态成员方法,所以可以通过如下方法访问外部类 //的静态成员 LocalInnerClass.method4(); //由于局部内部类所在方法是非静态成员方法,所以可以通过如下方法访问外部类 //的非静态成员 LocalInnerClass.this.method3(); //局部内部类中可以直接访问所在方法中的局部变量, //无需将局部变量声明为final System.out.println(a); } } new Inner1().method1(); } //method2是外部类的静态成员方法,当调用method2时可能没有创建外部类实例, //所以method2中只能访问外部类的静态成员变量, //所以在method2的局部内部类中也只能访问外部类的静态成员变量。 public static void method2(){ int a = 1; class Inner2{ public void method1(){ //由于局部内部类所在的方法是静态成员方法,所以可以通过如下方法访问外部类 //的静态成员 LocalInnerClass.method4(); //由于局部内部类所在的方法是静态成员方法,所以无法访问外部类的非静态成员方法。 //method3(); System.out.println(a); } } new Inner2().method1(); } private void method3(){ System.out.println("***"); } private static void method4(){ System.out.println("---"); } public static void main(String[] args){ new LocalInnerClass().method1(); LocalInnerClass.method2(); } } /* 结果: --- *** --- */
推荐阅读
-
关于内部类引用局部变量的一些注意事项
-
局部内部类访问他所在方法中的局部变量时的注意事项。
-
Java内部类------局部内部类(先看定义 再看实例代码)
-
局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因
-
内部类访问局部变量为什么必须要用final修饰
-
匿名内部类访问外部类中的局部变量必须是final属性
-
对JAVA中内部类(匿名内部类)访问的局部变量为何要用final修饰的讨论
-
Java学习笔记23---内部类之局部内部类只能访问final的局部变量
-
Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
-
中国芯片5年内反超世界最高水平?专家:局部有可能