Java学习笔记45. 初学Java内部类

本文介绍了Java中的内部类,包括静态内部类和成员内部类。静态内部类可以直接访问外部类的静态成员,但不能访问非静态成员。成员内部类则必须依赖于外部类的对象,不能包含静态成员。方法内部类的作用域仅限于方法内部,用法相对简单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在类的内部存在的类叫做内部类,内部类是嵌套类的一种。具体可以分为以下4种:

静态内部类:使用static关键字修饰的类

成员内部类:不使用static关键字修饰的类

方法内部类:在方法内部存在的内,它的作用域只在方法内部

匿名内部类:涉及接口和抽象类,暂时不讨论


静态内部类

当开发者不想通过使用外部类的对象访问内部类,而是直接访问时,可以声明内部类为static类型。

静态内部类可以访问外部类的静态成员,但是不能访问外部类的非静态成员。(但可以通过对象访问,注意对象与类的区分)

定义静态内部类的方法如下:

class enclosingClass{
	static class innerClass{
	}
}

在静态内部类中,可以有静态成员,也可以有非静态成员。不管类是静态的还是非静态的,可以在main方法中直接使用的永远是静态成员。对于非静态成员,如果要使用,也必须先建立起实例对象,示例代码如下:

class enclosingClass{
	static int outerA = 1;
	int outerX = 5;
	static class innerClass{
		static int innerB = 2;
		int innerC = 3;
		public void getValue(){
			outerA++;
			System.out.println(outerA);
		}
		static void sayHello(){
			System.out.println("Hello!");
		}
	}
	public static void main(String[] args){
		System.out.println(enclosingClass.innerClass.innerB); //外部类的main方法直接使用内部类的静态变量
		innerClass.sayHello();    //直接使用内部类的静态方法
//		System.out.println(enclosingClass.innerClass.innerC);    //内部类的非静态方法不能直接使用,否则会报错
		innerClass in = new innerClass();       //创建静态内部类对象
		System.out.println(in.innerC);    //使用静态内部类对象访问内部类非静态变量
		in.getValue();		           //使用静态内部类对象访问非静态方法
	}
}

普通内部类/成员内部类

静态内部类去掉static关键字就成了成员内部类。成员内部类是外部类的成员字段,它必须要依赖于外部类的对象而存在。所谓皮之不存,毛将焉附。使用成员内部类首先要创建外部类对象,再通过外部类的对象new一个内部类对象。然后才能使用内部类的变量和方法。需要注意的是,成员内部类中不能存在静态字段,如果写了一个静态变量或者静态方法,编译器就会报错。这是静态内部类和成员内部类的主要区别之一。

class outerClass{
    class innerClass2{
        int aa = 15;    //成员内部类不能有静态字段,否则会出错。
    }

    public static void main(String[] args){
	enclosingClass.innerClass2 in2 = new enclosingClass().new innerClass2(); //通过外部类对象的new方法,创建内部类对象
	System.out.println(in2.aa);    //使用内部类对象
    }
}

方法内部类

方法内部类比较简单,就是在方法内部使用类,方法内部类只能在方法内起作用,方法使用结束即终结。

class outerClass{
   int method(int a){
       class innerClass{  //方法内部类
       }
   }
}

学到这里,虽然学懂了概念,但是难以深入理解。等待过一段时间,再来深入全面总结一下内部类的知识。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值