`

内部类:局部内部类

 
阅读更多
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();
	}
}
/*
结果:
---
***
---
*/

 

分享到:
评论

相关推荐

    关于内部类的整理 内部类.xmind

    局部内部类是定义在方法、构造器或者代码块内的类。它的作用域仅限于该方法、构造器或代码块,因此只能在这个范围内被使用。局部内部类不能访问外部类的非静态成员,除非通过对象实例。 3. 匿名内部类: 匿名内部...

    内部类代码

    2. 局部内部类:局部内部类定义在方法或块的内部,其作用域仅限于该方法或块。由于它们的生命周期短,所以常用于实现匿名类,如事件监听器。 3. 匿名内部类:没有名字的内部类,通常用在需要一次性创建一个简短的类...

    Java内部类总结.pdf

    内部类分为四种主要类型:成员内部类、局部内部类、静态内部类和匿名内部类。每种类型的内部类都有其特定的使用场景和优势。 1. 成员内部类: 成员内部类作为外部类的成员,与外部类的字段和方法并列存在。成员...

    java 内部类 局部内部类 匿名类 实例代码

    本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...

    java 几种内部类(基础)(csdn)————程序.pdf

    内部类分为四种主要类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类就像是外部类的一个成员,它可以访问外部类的所有成员,包括私有成员。例如,在`Outer`类中定义的`Inner`...

    java(Day12)---内部类

    内部类主要有四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类可以直接访问外部类的所有成员,包括实例变量和方法。它定义的位置是在类中,但不在任何方法之内。成员内部...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...

    java内部类、异常、编程规范[文].pdf

    内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及静态内部类。 1. 成员内部类(Outer.java示例): 成员内部类如同其他成员变量一样,可以在类的任何地方定义,可以访问外部类的所有成员,包括...

    java内部类总结(含概念和实例)

    2. 局部内部类:在方法中定义的内部类,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内的常量,和此外围类所有的成员。 3. 静态内部类:静态内部类是指在外部类的静态成员中...

    Java的内部类讲解案例代码(成员内部类、局部内部类、匿名内部类、静态内部类、外部类访问四种内部类、其他类访问四种内部类...)

    - 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...

    JAVA内部类总结

    内部类分为四类:非静态成员内部类、静态成员内部类、局部内部类和匿名内部类。接下来将逐一介绍这四种类型的内部类。 #### 二、非静态成员内部类 非静态成员内部类是最常见的一种内部类形式,它具有以下特点: 1...

    局部内部类和匿名内部类使用局部变量为什么要final1

    局部内部类和匿名内部类是Java中的一种特性,它们允许我们在方法内部定义类。然而,一个重要的限制是,这些内部类只能访问在其作用域内的final或者实际上等效于final的局部变量。这是因为内部类可能在外部方法结束后...

    java 内部类使用(内部匿名类)

    内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...

    Java内部类总结,内部类的共同特征,内部类的分类等

    2. 局部内部类:即在一个方法中定义的内部类,局部内部类的作用域仅限于该方法内部。 3. 静态内部类:即使用 static 修饰的内部类,静态内部类可以独立于外部类的实例化。 4. 匿名内部类:即没有名字的内部类,匿名...

    Java内部类.pdf

    在Java中,内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。 - 成员内部类:定义在外部类的成员位置,可以直接访问外部类的所有成员。 - 局部内部类:定义在方法或者作用域块中,不能有...

    Java4Android 35_内部类和匿名内部类

    2. **局部内部类**: 定义在方法、构造器或块中的类被称为局部内部类。它的作用范围仅限于该方法、构造器或块。 3. **静态内部类**: 声明为static的内部类,称为静态内部类。它不持有对外部类的隐式引用,因此可以...

    内部类 匿名内部类 内部接口 对比说明

    2. **局部内部类**:定义在方法内部的类,具有局部变量的特性,不能有静态属性和方法,也不能在类外直接访问。它可以访问外部类的所有成员以及所在方法的final变量。局部内部类主要用于方法内部的特定逻辑,对外不...

    内部类示例

    首先,我们有四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。 1. 成员内部类:这种类型的内部类与外部类的成员变量地位相同,可以在任何地方声明,可以访问外部类的所有成员。例如: ```java...

    内部类分类及应用

    方法内部类对象不能使用该内部类所在方法的非final局部变量。 四、匿名内部类 匿名内部类是指不具有名称的内部类。匿名内部类适合使用场景包括:只用到类的一个实例、类在定义后马上用到、类非常小、给类命名并...

    java 内部类应用

    3. 使用限制:静态内部类无法直接访问外部类的非静态成员,局部内部类和匿名内部类的作用域有限。 总结,Java内部类是一种强大的工具,能够帮助我们更好地组织代码、实现复杂的逻辑和接口。但使用时也需谨慎,避免...

Global site tag (gtag.js) - Google Analytics