Java内部类的最详细详解
什么是Java内部类
在Java中,内部类是一个定义在其他类中的类,这个类可以访问其外部类的所有成员和方法。Java中内部类的分类有四种:成员内部类、局部内部类、匿名内部类和静态内部类。
成员内部类
成员内部类是定义在类的内部,且与类的成员变量和方法处于同一等级的类。成员内部类可以访问外部类的所有成员变量和方法,包括私有成员。成员内部类的格式如下:
public class OuterClass {
private int value;
class InnerClass {
public void printValue() {
System.out.println(value);
}
}
}
上述代码中,InnerClass是OuterClass的一个内部类。InnerClass中的方法printValue()可以访问OuterClass中的私有变量value。
局部内部类
局部内部类是定义在类的方法中的类。局部内部类的访问权限只能在定义的方法内,但是它们可以访问外部类和该方法的参数和变量。局部内部类的格式如下:
public class OuterClass {
public void printNumber(final int num) {
class PrintNumber {
public void print() {
System.out.println(num);
}
}
PrintNumber printNumber = new PrintNumber();
printNumber.print();
}
}
匿名内部类
匿名内部类是没有名字的内部类,它通常用来创建单个对象,该对象在使用时被创建。匿名内部类可以继承类或者实现接口,但是不能同时实现接口和继承类。匿名内部类的格式如下:
public class AnonymousClass {
public void sayHello() {
System.out.println("Hello");
}
public static void main(String[] args) {
AnonymousClass anonymousClass = new AnonymousClass() {
@Override
public void sayHello() {
System.out.println("Hello, World!");
}
};
anonymousClass.sayHello();
}
}
静态内部类
静态内部类是定义在类的内部的静态类,它的作用域不依赖于外部类,而是依赖于定义时所在的类。静态内部类与普通类一样,可以拥有静态成员和静态方法。静态内部类的格式如下:
public class OuterClass {
public static class StaticClass {
public void sayHello() {
System.out.println("Hello, World!");
}
}
public static void main(String[] args) {
StaticClass staticClass = new StaticClass();
staticClass.sayHello();
}
}
为什么使用内部类
- 内部类结构清晰,对于复杂的代码逻辑能够更好的组织代码。
- 内部类可以访问外部类的私有成员,方便代码编写。
- 内部类可以实现多继承,无需创建多个类实现某些功能。
示例说明
示例一
下面的例子演示了如何使用成员内部类:
public class OuterClass {
private int value;
class InnerClass {
public void printValue() {
System.out.println(value);
}
}
public void setValue(int value) {
this.value = value;
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.setValue(100);
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.printValue();
}
}
在上述代码中,创建了OuterClass的一个实例outerClass并且将value设置为100。然后创建了InnerClass的一个实例innerClass并且调用了它的方法printValue()打印value的值。
示例二
下面的例子演示了如何使用静态内部类:
public class OuterClass {
public static class StaticClass {
public void sayHello() {
System.out.println("Hello, World!");
}
}
public static void main(String[] args) {
StaticClass staticClass = new StaticClass();
staticClass.sayHello();
}
}
在上述代码中,创建了OuterClass.StaticClass的一个实例staticClass并且调用了它的方法sayHello()打印一条信息。注意,在创建实例时,需要使用OuterClass.StaticClass的格式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java内部类的最详细详解 - Python技术站