静态内部类和非静态内部类的区别

转载自:https://www.zhihu.com/question/28197253


示例代码如下:

static class Outer {
	class Inner {}
	static class StaticInner {}
}

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

Outer.StaticInner inner0 = new Outer.StaticInner();

静态内部类的作用:只是为了降低包的深度,方便类的使用,静态内部类适用于包含类当中,但又不依赖与外在的类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。

非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法

根据Oracle官方的说法: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes. 从字面上看,一个被称为静态嵌套类,一个被称为内部类。 从字面的角度解释是这样的: 什么是嵌套?嵌套就是我跟你没关系,自己可以完全独立存在,但是我就想借你的壳用一下,来隐藏一下我自己。 什么是内部?内部就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)
官方解释: http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
静态内部类就是个独立的类。 之所以要弄这么个东西,只是起到一个注释的效果,而且这个注释可静态检查。 比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。 这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。 非静态的才是真正的内部类,对其外部类有个引用。

总结: 一 . 静态内部类可以有静态变量和方法,而非静态内部类则不能有静态成员和静态方法。  二 . 静态内部类的非静态变量和方法可以访问外部类的静态变量,而不可访问外部类的非静态变量;

三 . 非静态内部类的非静态成员可以访问外部类的非静态变量和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值