有时候,我们定义一个类的时候,它是需要依附于其他类而存在的,这种就是内部类。
内部类有访问外部类的成员和方法的权限,可以访问外部类的私有成员。
内部类的主要作用是封装和组织代码,有助于实现更清晰、更模块化的程序结构。
Java 中有四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。
1)成员内部类:
成员内部类是定义在类内部的类。它可以访问外部类的成员,包括私有成员。
public class OuterClass {private int outerVar;// 成员内部类public class InnerClass {public void display() {System.out.println("Outer variable: " + outerVar);}}
}
在上述例子中,InnerClass
是 OuterClass
的成员内部类,可以访问 OuterClass
的私有变量 outerVar
。
2)局部内部类:
局部内部类是定义在方法或作用域内的类。它只能在定义它的方法或作用域内使用。
public class OuterClass {public void outerMethod() {int localVar = 10;// 局部内部类class LocalInnerClass {public void display() {System.out.println("Local variable: " + localVar);}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}
}
在上述例子中,LocalInnerClass
是 outerMethod
方法的局部内部类,只能在该方法内使用。
3)匿名内部类:
匿名内部类是没有名字的局部内部类,通常用于创建一个只需要使用一次的类。
public interface Greeting {void greet();
}public class OuterClass {public void displayGreeting() {// 匿名内部类实现接口Greeting greeting = new Greeting() {@Overridepublic void greet() {System.out.println("Hello from anonymous class!");}};greeting.greet();}
}
在上述例子中,通过匿名内部类实现了 Greeting
接口。
4)静态内部类:
静态内部类是定义在类内部但被声明为静态的类。它不依赖于外部类的实例,可以直接通过外部类名访问。
public class OuterClass {private static int outerVar;// 静态内部类public static class StaticInnerClass {public void display() {System.out.println("Outer variable: " + outerVar);}}
}
在上述例子中,StaticInnerClass
是 OuterClass
的静态内部类,可以通过 OuterClass.StaticInnerClass
直接访问。
内部类在一些场景下可以提供更好的封装和代码组织方式,但并不是在所有情况下都需要使用。
选择使用内部类的主要原因是它们具有更强的封装性,可以访问外部类的私有成员,同时有助于组织和管理相关的代码。