国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

靜態內部類和非靜態內部類的區別

2019-11-09 15:06:26
字體:
來源:轉載
供稿:網友

轉載自: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玩。非靜態的才是真正的內部類,對其外部類有個引用。

總結:一 . 靜態內部類可以有靜態變量和方法,而非靜態內部類則不能有靜態成員和靜態方法。 二 . 靜態內部類的非靜態變量和方法可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量;

三 . 非靜態內部類的非靜態成員可以訪問外部類的非靜態變量和方法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴海县| 安岳县| 灵台县| 曲水县| 长白| 濮阳县| 五家渠市| 泌阳县| 民勤县| 司法| 杭锦后旗| 定远县| 蒙阴县| 宝兴县| 天门市| 宁城县| 唐山市| 沙田区| 淄博市| 逊克县| 永寿县| 桐乡市| 巴东县| 桃源县| 嘉黎县| 原平市| 鄢陵县| 韶关市| 张家界市| 尉氏县| 资兴市| 綦江县| 万安县| 岱山县| 云和县| 古田县| 晴隆县| 石楼县| 澜沧| 唐山市| 宜良县|