java内部类 知乎_为什么Java内部类要设计成静态和非静态两种

作者:Paranoid

链接:https://www.zhihu.com/question/28197253/answer/365692360

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先,我们需要明白,为什么要设计Java内部类?然后再去探究为何又将内部类设计为静态与非静态两种。

将一个类设计成内部类,我觉得有两方面因素:

在一个类内部,需要操作某种属性,而这个属性需要涉及的面又很广,我们可以考虑,将这些属性设计为内部类。

然后就如下面XX用户回答的那样,好比你设计类 B 的目的只是为了给类 A 使用,那么,我们就可将其设定为内部类,没有必要将类 B 设置成单独的 Java 文件,防止与其他类产生依赖关系。

然后我们再来说说为什么又将内部类设计为静态内部类与内部类:

首先来看一下静态内部类的特点:如XX用户所述那样,我是静态内部类,只不过是想借你的外壳用一下。本身来说,我和你没有什么“强依赖”上的关系。没有你,我也可以创建实例。那么,在设计内部类的时候我们就可以做出权衡:如果我内部类与你外部类关系不紧密,耦合程度不高,不需要访问外部类的所有属性或方法,那么我就设计成静态内部类。而且,由于静态内部类与外部类并不会保存相互之间的引用,因此在一定程度上,还会节省那么一点内存资源,何乐而不为呢~~

既然上面已经说了什么时候应该用静态内部类,那么如果你的需求不符合静态内部类所提供的一切好处,你就应该考虑使用内部类了。最大的特点就是:你在内部类中需要访问有关外部类的所有属性及方法,我知晓你的一切… …

总结:首先需要知道为什么会有内部类,什么时候应该使用内部类,我们再去讨论,为什么 Java 的设计者们又将内部类设计为静态与非静态,这样就很清晰了。

很多人爱分析HashMap源码,HashMap源码就有个静态内部类的经典使用,HashMap把put进去的一个key value包装成一个Node,该Node就是静态内部类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值