高质量的网站建设,国外云服务器厂商,wordpress 域名邮箱,门图书馆户网站建设方案在Java中#xff0c;允许在一个类的内部定义类#xff0c;这样的类称作内部类#xff0c;内部类所在的类称作外部类。在实际开发中#xff0c;根据内部类的位置、修饰符和定义方式的不同#xff0c;内部类可分为4种#xff0c;分别是成员内部类、局部内部类、静态内部类、…在Java中允许在一个类的内部定义类这样的类称作内部类内部类所在的类称作外部类。在实际开发中根据内部类的位置、修饰符和定义方式的不同内部类可分为4种分别是成员内部类、局部内部类、静态内部类、匿名内部类。
成员内部类Member Inner Class
定义在外部类的成员位置与外部类的实例相关联并且没有使用 static 修饰的内部类。可以直接访问外部类的所有成员包括私有成员并且可以通过外部类对象创建实例。使用语法外部类名.内部类名 变量名 new 外部类名().new 内部类名();
局部内部类Local Inner Class
定义在方法或代码块内部作用范围仅限于所在的方法或代码块。不能有访问修饰符只能在定义它的方法或代码块中使用。可以访问所在方法或代码块中的局部变量必须是 final 或 effectively final。使用语法class 内部类名 { ... }
静态内部类Static Inner Class
定义在外部类中它是使用 static 修饰的内部类。与外部类的实例无关通过 外部类名.内部类名 直接访问。只能直接访问外部类的静态成员并创建实例不能访问非静态成员。使用语法外部类名.静态内部类名 变量名 new 外部类名().静态内部类名();
匿名内部类Anonymous Inner Class
没有显式的定义直接通过实例化接口或抽象类来创建。无需命名通常用于临时需要覆写某个方法的情况简化代码编写。可以是接口的实现类或继承自抽象类的子类。使用语法new 接口名/抽象类名() { //匿名内部类实现部分}
以下的示例演示了不同类型的内部类的使用
public class OuterClass {private int outerVariable 10;private static int outerStaticVariable 20;// 成员内部类public class MemberInnerClass {public void display() {System.out.println(成员内部类 outerVariable);}}// 静态内部类public static class StaticInnerClass {public void display() {System.out.println(静态内部类 outerStaticVariable);}}// 方法示例public void displayLocalInnerClass() {int localVariable 30; // 局部变量// 局部内部类class LocalInnerClass {public void display() {System.out.println(局部内部类 localVariable);}}LocalInnerClass localInnerObj new LocalInnerClass();localInnerObj.display();}// 匿名内部类示例public void displayAnonymousInnerClass() {Runnable runnable new Runnable() {Overridepublic void run() {System.out.println(匿名内部类);}};Thread thread new Thread(runnable);thread.start();}public static void main(String[] args) {OuterClass outerObj new OuterClass();// 使用成员内部类OuterClass.MemberInnerClass memberInnerObj outerObj.new MemberInnerClass();memberInnerObj.display();//运行成员内部类10// 使用静态内部类OuterClass.StaticInnerClass staticInnerObj new OuterClass.StaticInnerClass();staticInnerObj.display();//静态内部类20// 调用局部内部类示例方法outerObj.displayLocalInnerClass();//局部内部类30// 调用匿名内部类示例方法outerObj.displayAnonymousInnerClass();//匿名内部类}
}这个示例中演示了四种不同类型的内部类的使用方式 成员内部类Member Inner Class通过外部类实例创建内部类实例能够访问外部类实例的成员变量。 静态内部类Static Inner Class直接通过外部类名访问内部类与外部类实例无关只能访问外部类的静态成员。 局部内部类Local Inner Class定义在方法中的内部类仅在所在方法中可见可以访问所在方法的局部变量但被访问的局部变量必须是 final 或 effectively final 的。 匿名内部类Anonymous Inner Class通过实例化接口或抽象类来创建并且没有显式的定义常用于覆写一次性需要的方法。在示例中通过匿名内部类实现了 Runnable 接口并创建线程。