当我们在Java程序中声明一个类,这个类通常是在某一个包中的一个独立的.java文件中进行声明。但是Java中也存在一种叫做内部类的概念,内部类是被声明在一个外部类内部的类。在本文中,我们将详细讲解Java中的内部类的使用。
内部类的分类
Java中的内部类被分为4类,分别是:
- 成员内部类(Member Inner Class)
- 静态内部类(Static Inner Class)
- 局部内部类(Local Inner Class)
- 匿名内部类(Anonymous Inner Class)
成员内部类
一个非静态的内部类被称为成员内部类,它可以访问外部类的所有成员变量和方法。下面是它的语法结构:
class OuterClass {
...
class InnerClass {
...
}
}
其中,OuterClass是外部类,InnerClass是内部类。
下面是一个成员内部类的示例:
class OuterClass {
// 外部类的私有属性
private int outerVar = 1;
// 外部类的静态属性
private static int outerStaticVar = 2;
// 内部类
class InnerClass {
// 内部类的方法
public void innerMethod() {
System.out.println("outerVar = " + outerVar);
System.out.println("outerStaticVar = " + outerStaticVar);
}
}
}
在这个例子中,我们可以看到InnerClass可以访问到OuterClass中的成员变量outerVar和outerStaticVar。
静态内部类
一个静态的内部类被称为静态内部类,它不能访问外部类的非静态成员。静态内部类的语法结构与成员内部类的语法结构几乎相同,唯一的区别在于它的前面多了一个 static 关键字。下面是它的语法结构:
class OuterClass {
...
static class InnerClass {
...
}
}
下面是一个静态内部类的示例:
class OuterClass {
// 外部类的私有属性
private int outerVar = 1;
// 外部类的静态属性
private static int outerStaticVar = 2;
// 静态内部类
static class InnerClass {
// 静态内部类的方法
public static void innerStaticMethod() {
System.out.println("outerStaticVar = " + outerStaticVar);
}
}
}
在这个例子中,我们可以看到InnerClass只能访问到OuterClass中的静态成员outerStaticVar。
局部内部类
一个内部类可以被定义在一个方法体内,这样的内部类被称为局部内部类。局部内部类只能在方法体内进行访问,它与成员内部类和静态内部类的语法结构有所不同。下面是它的语法结构:
class OuterClass {
...
void outerMethod() {
class LocalInnerClass {
...
}
}
}
下面是局部内部类的示例:
class OuterClass {
// 外部类的私有属性
private int outerVar = 1;
void outerMethod() {
// 局部内部类
class LocalInnerClass {
// 局部内部类的方法
public void innerMethod() {
System.out.println("outerVar = " + outerVar);
}
}
// 创建局部内部类的对象
LocalInnerClass localInnerClass = new LocalInnerClass();
// 调用局部内部类的方法
localInnerClass.innerMethod();
}
}
在这个例子中,我们可以看到LocalInnerClass只能在outerMethod()方法中进行访问,局部内部类是最少被使用的内部类之一。
匿名内部类
一个没有名称的内部类被称为匿名内部类,它没有显式地定义类的名称,通常都是直接在方法调用时创建的。匿名内部类经常被用来在编写事件处理程序时使用,也可以用于创建接口的实现。匿名内部类不需要使用任何访问修饰符,下面是它的语法结构:
new 类名或者接口名() {
...
}
下面是匿名内部类的示例:
interface AnonymousInnerClass {
void hello();
}
class OuterClass {
// 外部类的方法
void outerMethod() {
// 匿名内部类
AnonymousInnerClass anonymousInnerClass = new AnonymousInnerClass() {
// 匿名内部类的方法实现
public void hello() {
System.out.println("hello world!");
}
};
// 调用匿名内部类的方法
anonymousInnerClass.hello();
}
}
在这个例子中,我们可以看到anonymousInnerClass是一个匿名内部类的实例,它实现了接口AnonymousInnerClass中的hello()方法。
总结
本文详细讲解了Java中的内部类,包括成员内部类、静态内部类、局部内部类以及匿名内部类。对内部类的使用分别进行了示例说明,不同类型的内部类有不同的使用场景,开发者可以根据不同需求进行相应的选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中的内部类你了解吗 - Python技术站