2.2 封裝 (面向對象)

1、Java中的封裝

面向對象的三大特性:封裝润歉、繼承模狭、多態(tài)

  • 1、封裝:
    將類的某些信息隱藏在類內部踩衩,不允許外部程序直接訪問嚼鹉,而是通過該類提供的方法來實現(xiàn)對隱藏信息的操作和訪問。
  • 2驱富、好處:
    只能通過規(guī)定的方法訪問數(shù)據(jù)
    隱藏類的實例細節(jié)锚赤,方便修改和實現(xiàn)
  • 3、封裝的實現(xiàn)步驟
    修改屬性的可見性--private
    創(chuàng)建getter/setter方法--用于屬性的讀寫
    在getter/setter方法中加入屬性控制語句--對屬性值的合法性進行判斷
public class Telphone {
    private float screen;
    float cpu;
    float mem;
    
    public float getScreen(){
        return screen;
    }
    
    public void setScreen(float newScreen){
        screen=newScreen;
    }
    public Telphone(){
        System.out.println ("無參的構造方法執(zhí)行了褐鸥!");
    }
    public Telphone(float newScreen,float newCpu,float newMem){
        screen=newScreen;
        cpu=newCpu;
        mem=newMem;
        System.out.println ("有參的構造方法執(zhí)行了线脚!");
    }
    
    public static void main(String[] args){
        Telphone phone =new Telphone();
        Telphone phone2 =new Telphone(5.0f,1.4f,2.0f);
        phone2.setScreen(6.0f);
        System.out.println("screen:"+phone2.getScreen());
    }
}

2、使用包管理Java中的類

  • 包的作用:
    管理Java文件
    解決同名文件沖突
  • 定義包:package包名
    注:必須放在Java源程序的第一行
    包名可以使用“.”號隔開
  • 系統(tǒng)中的包:
    java.(功能).(類)
    java.lang.(類)包含Java語言基礎的類
    java.util.(類)包含Java語言中各種工具類
    java.io.(類)包含輸入叫榕、輸出相關功能的類
  • 包的使用
    1浑侥、可以通過import關鍵字,在某個文件使用其他文件中的類
    import java.util.Arrays; 導入部分
    import java.util.*; 導入所有
    2晰绎、Java中寓落,包的命名規(guī)范是全小寫字母拼寫

3、Java中的訪問修飾符

訪問修飾符--可以修飾屬性和方法的訪問范圍

Paste_Image.png

4荞下、this關鍵字

  • 1伶选、this關鍵字代表當前對象
    this.屬性 操作當前對象的屬性
    this.方法 調用當前對象的方法
  • 2史飞、封裝對象的屬性的時候,經常會使用this關鍵字

5考蕾、Java中的內部類

問:什么是內部類呢祸憋?
答:內部類( Inner Class )就是定義在另外一個類里面的類。與之對應肖卧,包含內部類的類被稱為外部類蚯窥。
問:那為什么要將一個類定義在另一個類里面呢?清清爽爽的獨立的一個類多好叭省@乖!
答:內部類的主要作用如下:

  1. 內部類提供了更好的封裝葵姥,可以把內部類隱藏在外部類之內荷鼠,不允許同一個包中的其他類訪問該類
  2. 內部類的方法可以直接訪問外部類的所有數(shù)據(jù),包括私有的數(shù)據(jù)
  3. 內部類所實現(xiàn)的功能使用外部類同樣可以實現(xiàn)榔幸,只是有時使用內部類更方便
    問:內部類有幾種呢允乐?
    答:內部類可分為以下幾種:
    成員內部類
    靜態(tài)內部類
    方法內部類
    匿名內部類
//外部類HelloWorld
public class HelloWorld {
    
    // 內部類Inner,類Inner在類HelloWorld的內部
    public class Inner {
        
        // 內部類的方法
        public void show() {
            System.out.println("welcome to imooc!");
        }
    }
    
    public static void main(String[] args) {
        
        // 創(chuàng)建外部類對象
        HelloWorld hello = new HelloWorld();
        // 創(chuàng)建內部類對象
        Inner i = hello.new Inner();
        // 調用內部類對象的方法
        i.show();
    }
}

6削咆、java中的成員內部類

內部類中最常見的就是成員內部類牍疏,也稱為普通內部類。我們來看如下代碼:

Paste_Image.png

Paste_Image.png

從上面的代碼中我們可以看到拨齐,成員內部類的使用方法
1鳞陨、 Inner 類定義在 Outer 類的內部,相當于 Outer 類的一個成員變量的位置瞻惋,Inner 類可以使用任意訪問控制符厦滤,如 public 、 protected 歼狼、 private 等
2掏导、 Inner 類中定義的 test() 方法可以直接訪問 Outer 類中的數(shù)據(jù),而不受訪問控制符的影響羽峰,如直接訪問 Outer 類中的私有屬性a
3碘菜、 定義了成員內部類后,必須使用外部類對象來創(chuàng)建內部類對象限寞,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象.new 內部類( );
4仰坦、 編譯上面的程序后履植,會發(fā)現(xiàn)產生了兩個 .class 文件

其中,第二個是外部類的 .class 文件悄晃,第一個是內部類的 .class 文件玫霎,即成員內部類的 .class 文件總是這樣:外部類名$內部類名.class
另外凿滤,友情提示哦:
1、 外部類是不能直接使用內部類的成員和方法滴

Paste_Image.png

可先創(chuàng)建內部類的對象庶近,然后通過內部類的對象來訪問其成員變量和方法翁脆。

2、 如果外部類和內部類具有相同的成員變量或方法鼻种,內部類默認訪問自己的成員變量或方法反番,如果要訪問外部類的成員變量,可以使用 this 關鍵字叉钥。如:

Paste_Image.png
Paste_Image.png
//外部類HelloWorld
public class HelloWorld{
    
    //外部類的私有屬性name
    private String name = "imooc";
    
    //外部類的成員屬性
    int age = 20;
    
    //成員內部類Inner
    public class Inner {
        String name = "愛慕課";
        //內部類中的方法
        public void show() { 
            System.out.println("外部類中的name:" + HelloWorld.this.name                 );
            System.out.println("內部類中的name:" + name                 );
            System.out.println("外部類中的age:" + age);
        }
    }
    
    //測試成員內部類
    public static void main(String[] args) {
        
        //創(chuàng)建外部類的對象
        HelloWorld o = new HelloWorld (); 
        
        //創(chuàng)建內部類的對象
        Inner inn =o.new Inner()    ;
        
        //調用內部類對象的show方法
        inn.show();
    }
}

7罢缸、java中的靜態(tài)內部類

靜態(tài)內部類是 static 修飾的內部類,這種內部類的特點是:
1投队、 靜態(tài)內部類不能直接訪問外部類的非靜態(tài)成員枫疆,但可以通過** new 外部類().成員** 的方式訪問
2、 如果外部類的靜態(tài)成員與內部類的成員名稱相同敷鸦,可通過“類名.靜態(tài)成員”訪問外部類的靜態(tài)成員息楔;如果外部類的靜態(tài)成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態(tài)成員
3扒披、 創(chuàng)建靜態(tài)內部類的對象時值依,不需要外部類的對象,可以直接創(chuàng)建 內部類 對象名= new 內部類();

Paste_Image.png

//外部類
public class HelloWorld {
    
    // 外部類中的靜態(tài)變量score
    private static int score = 84;
    
    // 創(chuàng)建靜態(tài)內部類
    public static  class SInner {
        // 內部類中的變量score
        int score = 91;
        
        public void show() {
            System.out.println("訪問外部類中的score:" + HelloWorld.score           );
            System.out.println("訪問內部類中的score:" + score);
        }
    }

    // 測試靜態(tài)內部類
    public static void main(String[] args) {
        // 直接創(chuàng)建內部類的對象
        SInner si=new SInner();
        
        // 調用show方法
        si.show();
    }
}

8谎碍、java中的方法內部類

方法內部類就是內部類定義在外部類的方法中鳞滨,方法內部類只在該方法的內部可見,即只在該方法內可以使用蟆淀。

Paste_Image.png

一定要注意哦:由于方法內部類不能在外部類的方法以外的地方使用拯啦,因此方法內部類不能使用訪問控制符和 static 修飾符。

//外部類
public class HelloWorld {
    
    private String name = "愛慕課";
    
    // 外部類中的show方法
    public void show() { 
        // 定義方法內部類
        class MInner {
            int score = 83;
            public int getScore() {
                return score + 10;
            }
        }
        
        // 創(chuàng)建方法內部類的對象
        MInner mi=new MInner();
        
        // 調用內部類的方法
        int newScore=mi.getScore();
        
        System.out.println("姓名:" + name + "\n加分后的成績:" + newScore);
    }
    
    // 測試方法內部類
    public static void main(String[] args) {
        
        // 創(chuàng)建外部類的對象
        HelloWorld mo=new HelloWorld();
        
        // 調用外部類的方法
        mo.show();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末熔任,一起剝皮案震驚了整個濱河市褒链,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疑苔,老刑警劉巖甫匹,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惦费,居然都是意外死亡兵迅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門薪贫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恍箭,“玉大人,你說我怎么就攤上這事瞧省〕敦玻” “怎么了鳍贾?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長交洗。 經常有香客問我骑科,道長,這世上最難降的妖魔是什么构拳? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任咆爽,我火速辦了婚禮,結果婚禮上隐圾,老公的妹妹穿的比我還像新娘伍掀。我一直安慰自己,他們只是感情好暇藏,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布蜜笤。 她就那樣靜靜地躺著,像睡著了一般盐碱。 火紅的嫁衣襯著肌膚如雪把兔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天瓮顽,我揣著相機與錄音县好,去河邊找鬼。 笑死暖混,一個胖子當著我的面吹牛缕贡,可吹牛的內容都是我干的。 我是一名探鬼主播拣播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晾咪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贮配?” 一聲冷哼從身側響起谍倦,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泪勒,沒想到半個月后昼蛀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡圆存,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年叼旋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦辙。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡夫植,死狀恐怖,靈堂內的尸體忽然破棺而出怕轿,到底是詐尸還是另有隱情偷崩,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布撞羽,位于F島的核電站阐斜,受9級特大地震影響,放射性物質發(fā)生泄漏诀紊。R本人自食惡果不足惜谒出,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邻奠。 院中可真熱鬧笤喳,春花似錦、人聲如沸碌宴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贰镣。三九已至呜象,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碑隆,已是汗流浹背恭陡。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留上煤,地道東北人休玩。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像劫狠,于是被迫代替她去往敵國和親拴疤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法嘉熊,類相關的語法遥赚,內部類的語法,繼承相關的語法阐肤,異常的語法凫佛,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • Java 內部類 分四種:成員內部類、局部內部類孕惜、靜態(tài)內部類和匿名內部類愧薛。 1、成員內部類: 即作為外部類的一個成...
    ikaroskun閱讀 1,231評論 0 13
  • 一:java概述:1衫画,JDK:Java Development Kit毫炉,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,649評論 0 11
  • 面向對象主要針對面向過程削罩。 面向過程的基本單元是函數(shù)瞄勾。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,054評論 0 4
  • 今天上午約11點準備出發(fā)回省城家里费奸。謝新宇前兩天電話老公,他們高中黃姓同學從深圳過來进陡,他們又要同學聚會了愿阐,說實...
    公主殿下_閱讀 217評論 0 0