Java入門 第二季第二章 封裝
面向對象三大特性:封裝、繼承、多態
2-1 什麼是Java中的封裝
★
概念
將類的某些信息 隱藏在類內部,不允許外部程序直接訪問,而是通過
該類提供的方法來實現
對隱藏信息的操作和訪問。
★
好處
a.只能通過規定的
方法訪問數據
b.
隱藏類的實例
細節,方便修改和實現
★
封裝的實現步驟
2-2 使用 包 管理 Java 中的類
★
包的作用
a.管理Java文件
b.解決同名文件沖突
★
定義包:package 包名
注:必須放在Java源程序的第一行
包名間可以使用“ . ”號隔開(層次關系)
eg:com.immoc.MyClass
例如:音樂類——MyClassMusic
-music
com.imooc.music.MyClassMusic
-movie
com.imooc.movie.MyClassMusic
★
系統中的包
java.(功能).(類)
eg:java.lang.(類) 包含java語言基礎的類
java.util.(類) 包含java語言中各種工具類
java.io.(類) 包含輸入、輸出相關功能的類
★
包的使用
a. 可以通過
import關鍵字,在某個文件中使用其他文件中的類
import com.imooc.music.MyClass
b. Java中,
包的命名規范是全小寫字母拼寫
c. 使用的時候不但可以加載某個包下的所有文件
eg:com.imooc.*
其中 “ * ” 表示所有文件
也可以加載某個具體子包下的所有文件
eg:com.imooc.music.*
2-3 Java 中的訪問修飾符
訪問修飾符——可以修飾屬性和方法的訪問范圍
★訪問修飾符的總結
形象化類比系列圖
圖:類的屬性和方法 —— 人的錢
圖:private —— 鎖在保險櫃裡,只有自己可以用
圖:默認 —— 同一個屋檐下的人可以使用
圖:protected —— 跟我有關系的也可以使用
圖:public —— 所有人都可以使用
2-4 Java 中的 this 關鍵字
★this關鍵字代表當前對象
this.屬性 操作當前對象的屬性
this.方法 調用當前對象的方法
★封裝對象的屬性的時候,經常會使用 this 關鍵字
Eclipse提供了自動生成 getter 和 setter 的功能,步驟:
Step 1:點擊Source,選擇 Generate Getters and Setters
Step 2:選擇要生成的方法,點擊 確定
效果圖:this關鍵字 避免了變量重名導致的混亂
2-5 什麼是 Java 中的內部類
內部類(Inner Class)就是定義在另外一個類裡面的類。與之對應,包含內部類的類被稱為
外部類。
★內部類的主要作用
a. 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,
不允許同一個包中的其他類訪問該類
b.
內部類的方法可以直接訪問外部類的所有數據,包括私有的數據
c. 內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便
★內部類的種類
成員內部類
靜態內部類
方法內部類
匿名內部類
圖:示例
2-6 Java 中的 成員內部類
內部類中最常見的就是成員內部類,也稱為普通內部類。
我們來看如下代碼:
運行結果為:
從上面的代碼中我們可以看到,成員內部類的使用方法:
①Inner 類定義在 Outer類的內部,相當於 Outer類 的一個
成員變量的位置
Inner類 可以使用任意訪問控制符,如 public、protected、private等
②Inner 類中定義的test()
方法可以直接訪問 Outer類中的數據,而不受訪問控制符的影響,如直接訪問 Outer類中的私有屬性 a
③定義了成員內部類後,
必須使用外部類對象來創建內部類對象,而不能直接去 new 一個內部類對象,
即:
內部類 對象名 = 外部類對象.new 內部類();
④編譯上面的程序後,會發現產生了兩個 .class 文件
其中,第二個是外部類的 .class 文件,第一個是內部類的 .class文件,即成員內部的 .class 文件總是這樣:外部類名$內部類名.class
另外,
①外部類是不能直接使用內部類的成員和方法
可先創建內部類的對象,然後通過內部類的對象來訪問其成員變量和方法。
圖:修正版
②如果外部類和內部類具有相同的成員變量或方法,內部類默認訪問自己的成員變量或方法。
如果要訪問外部類的成員變量,可以使用 this 關鍵字。如:
運行結果:
我的進一步探究:
探究1:
編譯器會報錯:
探究2:
運行結果:
2-7 Java 中的 靜態內部類
靜態內部類是 static 修飾的內部類,這種內部類的特點是:
①靜態內部類不能直接訪問外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問
②如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態成員
③創建靜態內部類的對象時,不需要外部類的對象,可以直接創建
內部類 對象名 = new 內部類();
運行結果 :
我的進一步探究:
運行結果:
2-8 Java 中的 方法內部類
方法內部類 就是 內部類 定義在 外部類 的方法中,
方法內部類只在該方法的內部可見,即只在該方法內可以使用。
一定要注意哦:由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用訪問控制符和 static 修飾符。