局部内部类和局部变量一样,是指在方法中定义的内部类。它是一个只有在局部有效的内部类,所以只能在其有效的范围的位置访问或创建其对象。
package JAVA_Project_01_05;
//局部内部类和局部变量一样,是指在方法中定义的内部类。它是一个只有在局部有效的内部类,所以只能在其有效的范围的位置访问或创建其对象。
//使用局部内部类的技术要点如下:
//
//· 局部内部类的语法格式:
//
//class外部类名{
//
//(访问修饰符)返回类型方法名(参数){
//
//class局部内部类名{}}}
//
//· 局部内部类可以访问外部类的私有实例变量和局部常量。与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。
//
//· 在外部类的外部不能直接访问局部内部类,这样就有效地保证了局部内部类对外是不可见的。为了能够用外部类访问到局部内部类,可以通过局部内部类和接口达到一个强制的弱耦合关系,用局部内部类来实现接口,并在方法中返回接口类型,这样便可一方面屏蔽类的可见性;另一方面在类的外部访问到局部内部类。
interface LocalInterface {//定义一个接口
public void local_1();//定义三个方法
public void local_2();
public void local_3();
}
class Outer {//外部类
private int a1 = 10;
private void privateShow() {
System.out.println("外部类的私有非静态变量");
}
public void show() {
System.out.println("外部类的非静态方法");
}
public LocalInterface method() {//方法返回局部内部类实现的接口
final int number = 20;
class Inner implements LocalInterface {//定义局部内部类实现接口
public void local_1() {
show();
}
public void local_2() {
System.out.println("显示局部内部类的成员常量:" + number);
System.out.println("调用外部类的成员变量:" + a1);
}
public void local_3() {
privateShow();
}
}
return new Inner();
}
}
public class TextLocalInnerClass {//操作局部内部类的类
public static void main(String[] args) {//Java程序主入口处
Outer out = new Outer();//实例化对象
LocalInterface local = out.method();//调用方法返回接口
local.local_1();//调用接口的方法
local.local_2();
local.local_3();
}
}
/*
(1)程序中定义接口、外部类以及外部类的方法和属性。其中在method()方法中创建局部内部类Inner来实现接口中的方法并返回接口类型,
这样才能访问到局部内部类的方法。其中local_1()方法中调用外部类的非静态方法,local_2()方法中显示局部内部类的成员常量和调用外部类的成员变量。
local_3()方法中调用外部类的私有的非静态方法。
(2)需要注意的是:在局部内部类中声明局部常量必须是final型的,不是final型的是无法访问的。
*/