package org.lgy.study.innerclass; public class LocalInnerClass{ public static void main(String[] args){ //如果需要在局部内部类中访问所在方法的局部变量,则必须将局部变量声明为final final int x = 1; //局部内部类仅在该方法里有效,由于局部内部类不能在外部类的方法以外的地方使用, //因此局部内部类也不能使用访问控制符和static修饰符修饰。 //如果需要用局部内部类定义变量、创建实例、派生子类,那么都只能在局部内部类所在的方法内进行 class InBase{ //局部内部类中不能定义static成员 //static String str = "123"; private String var = "***"; private void method1(){ System.out.println("method1 in InBase"); } } class InSub extends InBase{ private int var = 1; private void method1(){ System.out.println("method1 in InSub"); } } InBase inBase = new InSub(); //即使内部类的成员变量和成员方法是私有的,也可以直接访问 System.out.println(inBase.var); inBase.method1(); } }
package org.lgy.study.innerclass; public class LocalInnerClass{ //method1是外部类的非静态成员方法,当调用method1是已经创建了外部类的对象, //所以method1中既可以访问外部类的非静态成员,也可以访问外部类的静态成员, //所以在method1的局部内部类中也既可以访问外部类的非静态成员,也可以访问外部类的静态成员。 public void method1(){ int a = 1; class Inner1{ //局部内部类中不能定义static成员 //static String str; public void method1(){ //由于局部内部类所在方法是非静态成员方法,所以可以通过如下方法访问外部类 //的静态成员 LocalInnerClass.method4(); //由于局部内部类所在方法是非静态成员方法,所以可以通过如下方法访问外部类 //的非静态成员 LocalInnerClass.this.method3(); //局部内部类中可以直接访问所在方法中的局部变量, //无需将局部变量声明为final System.out.println(a); } } new Inner1().method1(); } //method2是外部类的静态成员方法,当调用method2时可能没有创建外部类实例, //所以method2中只能访问外部类的静态成员变量, //所以在method2的局部内部类中也只能访问外部类的静态成员变量。 public static void method2(){ int a = 1; class Inner2{ public void method1(){ //由于局部内部类所在的方法是静态成员方法,所以可以通过如下方法访问外部类 //的静态成员 LocalInnerClass.method4(); //由于局部内部类所在的方法是静态成员方法,所以无法访问外部类的非静态成员方法。 //method3(); System.out.println(a); } } new Inner2().method1(); } private void method3(){ System.out.println("***"); } private static void method4(){ System.out.println("---"); } public static void main(String[] args){ new LocalInnerClass().method1(); LocalInnerClass.method2(); } } /* 结果: --- *** --- */
相关推荐
局部内部类是定义在方法、构造器或者代码块内的类。它的作用域仅限于该方法、构造器或代码块,因此只能在这个范围内被使用。局部内部类不能访问外部类的非静态成员,除非通过对象实例。 3. 匿名内部类: 匿名内部...
2. 局部内部类:局部内部类定义在方法或块的内部,其作用域仅限于该方法或块。由于它们的生命周期短,所以常用于实现匿名类,如事件监听器。 3. 匿名内部类:没有名字的内部类,通常用在需要一次性创建一个简短的类...
内部类分为四种主要类型:成员内部类、局部内部类、静态内部类和匿名内部类。每种类型的内部类都有其特定的使用场景和优势。 1. 成员内部类: 成员内部类作为外部类的成员,与外部类的字段和方法并列存在。成员...
本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...
内部类分为四种主要类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类就像是外部类的一个成员,它可以访问外部类的所有成员,包括私有成员。例如,在`Outer`类中定义的`Inner`...
内部类主要有四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类可以直接访问外部类的所有成员,包括实例变量和方法。它定义的位置是在类中,但不在任何方法之内。成员内部...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及静态内部类。 1. 成员内部类(Outer.java示例): 成员内部类如同其他成员变量一样,可以在类的任何地方定义,可以访问外部类的所有成员,包括...
2. 局部内部类:在方法中定义的内部类,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。 3. 静态内部类:静态内部类是指在外部类的静态成员中...
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
内部类分为四类:非静态成员内部类、静态成员内部类、局部内部类和匿名内部类。接下来将逐一介绍这四种类型的内部类。 #### 二、非静态成员内部类 非静态成员内部类是最常见的一种内部类形式,它具有以下特点: 1...
局部内部类和匿名内部类是Java中的一种特性,它们允许我们在方法内部定义类。然而,一个重要的限制是,这些内部类只能访问在其作用域内的final或者实际上等效于final的局部变量。这是因为内部类可能在外部方法结束后...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...
2. 局部内部类:即在一个方法中定义的内部类,局部内部类的作用域仅限于该方法内部。 3. 静态内部类:即使用 static 修饰的内部类,静态内部类可以独立于外部类的实例化。 4. 匿名内部类:即没有名字的内部类,匿名...
在Java中,内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。 - 成员内部类:定义在外部类的成员位置,可以直接访问外部类的所有成员。 - 局部内部类:定义在方法或者作用域块中,不能有...
2. **局部内部类**: 定义在方法、构造器或块中的类被称为局部内部类。它的作用范围仅限于该方法、构造器或块。 3. **静态内部类**: 声明为static的内部类,称为静态内部类。它不持有对外部类的隐式引用,因此可以...
2. **局部内部类**:定义在方法内部的类,具有局部变量的特性,不能有静态属性和方法,也不能在类外直接访问。它可以访问外部类的所有成员以及所在方法的final变量。局部内部类主要用于方法内部的特定逻辑,对外不...
首先,我们有四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。 1. 成员内部类:这种类型的内部类与外部类的成员变量地位相同,可以在任何地方声明,可以访问外部类的所有成员。例如: ```java...
方法内部类对象不能使用该内部类所在方法的非final局部变量。 四、匿名内部类 匿名内部类是指不具有名称的内部类。匿名内部类适合使用场景包括:只用到类的一个实例、类在定义后马上用到、类非常小、给类命名并...
3. 使用限制:静态内部类无法直接访问外部类的非静态成员,局部内部类和匿名内部类的作用域有限。 总结,Java内部类是一种强大的工具,能够帮助我们更好地组织代码、实现复杂的逻辑和接口。但使用时也需谨慎,避免...