Think in java 學(xué)習(xí)筆記:訪問權(quán)限控制逞姿,復(fù)用類(繼承)

1.protected使用

protected處理的是繼承的概念辞嗡,如果創(chuàng)建了一個新包,并從另一個包中繼承類滞造,可以訪問的成員有public和protected续室。protected 也提供包訪問權(quán)限。

package com.zhangyue.learn;

import static net.mindview.util.Print.*;

public class Test1 {
    protected int n;
    public int m;
    public static void main(String[] args) {
        print("aaaaa");
    }

}


package com.zhangyue.learn1;

import com.zhangyue.learn.Test1;

public class LearnProtect extends Test1{
    
    public static void main(String[] args) {
        LearnProtect l = new LearnProtect();
        l.m = 1;
        l.n = 2;
    }
}

class Other{
    void test(){
        Test1 t = new Test1();
        t.m = 2;
//      t.n = 1;
    }
}

2.訪問權(quán)限控制將權(quán)限的邊界化在了數(shù)據(jù)類型的內(nèi)部的原因

  • 第一谒养,設(shè)定客戶端程序員可以使用和不可以使用的界限挺狰,可以在結(jié)構(gòu)中建立自己的內(nèi)部機(jī)制,不必?fù)?dān)心客戶端程序員把它當(dāng)做是自己可以使用的接口的一部分。
  • 第二丰泊,就是接口和具體實現(xiàn)進(jìn)行分離薯定。如果一個結(jié)構(gòu)是用于程序中,而客戶端程序員除了可以向接口發(fā)送信息外什么也不可以做的話瞳购,就可以隨意更改所有不是public的東西而不會破壞客戶端代碼沉唠。

3. 復(fù)用類

即可以通過創(chuàng)建新類來復(fù)用代碼,而不必重頭開始編寫苛败,可以使用別人已經(jīng)開發(fā)并且調(diào)試好的類满葛,有兩種方法,組合語法和繼承語法罢屈。

  • 組合語法:新有的類是由現(xiàn)有的類的對象組合而成的嘀韧,復(fù)用了現(xiàn)有代碼的功能,而不是它的形式缠捌。
  • 繼承語法:按照現(xiàn)有類的類型來創(chuàng)建新類锄贷。無需改變現(xiàn)有類的形式,采用現(xiàn)有類的形式并在其中添加新代碼曼月。

5. 繼承

當(dāng)創(chuàng)建一個類時谊却,總是在繼承,除了明確指出繼承哪個類哑芹,都隱式地繼承Object類炎辨。

package com.zhangyue.learn;

class Cleanser{
    private String s = "Cleanser";
    public void append(String a){ s += a;}
    public void dilute(){ append(" dilute()");}
    public void apply(){ append(" apply()");}
    public void scrub(){ append(" scrub()");}
    public String toString(){return s;}
        //可以為每個類創(chuàng)建一個main()方法,方便測試
    public static void main(String[] args){
        Cleanser c = new Cleanser();
        c.dilute();c.apply();c.scrub();
        System.out.println(c);
    }
}
public class Detergent extends Cleanser{
    public void scrub(){
        append("Deprecated.scrub()");
        super.scrub();//super 表示超類的意思聪姿,當(dāng)前類就是從超類繼承過來的
    }
    public void foam(){
        append("foam()");
    }
    public static void main(String[] args) {
        Detergent d = new Detergent();
        d.apply();d.dilute();d.scrub();d.foam();
        System.out.println(d);
        System.out.println("Testing base class");
        Cleanser.main(args);
    }

}

6.基類初始化

  • 構(gòu)造器不帶參數(shù)
package com.zhangyue.learn;

class Art{
   public Art() {
       System.out.println("Art()");
   }
}
class Drawing extends Art{
   public Drawing() {
       System.out.println("Drawing()");
   }
}
public class Cartoon extends Drawing{
   public Cartoon() {
       System.out.println("Cartoon()");
   }
   public static void main(String[] args) {
       Cartoon c = new Cartoon();
   }

}
/*output
Art()
Drawing()
Cartoon()
*/

構(gòu)造過程從基類向外擴(kuò)散碴萧,基類在導(dǎo)出類可以訪問它之前就完成了初始化。即使不為Cartoon創(chuàng)建構(gòu)造器末购,編譯器也會合成默認(rèn)的構(gòu)造器調(diào)用基類構(gòu)造器破喻。

  • 構(gòu)造器帶參數(shù)
package com.zhangyue.learn;

class Game{
    public Game(int i) {
        System.out.println("Game()");
    }
}
class BoardGame extends Game{
    public BoardGame(int i) {
        super(i);   //調(diào)用基類構(gòu)造器
        System.out.println("BoardGame()");
    }
}

public class Chess extends BoardGame{
    public Chess() {
        super(11);
        System.out.println("Chess()");
    }
    public static void main(String[] args) {
        Chess c = new Chess();
    }

}

如果不在BoardGame里調(diào)用基類構(gòu)造器,編譯器會抱怨無法找到符合Game()形式的構(gòu)造器盟榴,而且曹质,調(diào)用基類構(gòu)造器必須是在導(dǎo)出類構(gòu)造器中要做的第一件事。

7. 向上轉(zhuǎn)型

“為新的類提供方法”并不是繼承中最重要的一面擎场,其最重要的是用來表現(xiàn)新類和基類的關(guān)系羽德,即“新類是現(xiàn)有類的一種類型”。

package com.zhangyue.learn;

class Instruction{
    public void paly(){}
    public static void tune(Instruction i){
        i.paly();
    }
}
public class Wing extends Instruction{

    public static void main(String[] args) {
        Wing w = new Wing();
        Instruction.tune(w);
    }

}

將Wing引用轉(zhuǎn)換為Instruction引用的動作就是向上轉(zhuǎn)型顶籽。是安全的玩般。

8. 選擇組合與繼承

到底使用組合還是繼承,一個最清晰的判斷方法就是問問自己是否需要從新類向基類進(jìn)行向上轉(zhuǎn)型礼饱。

9.final關(guān)鍵字

  • 說明
    對于基本數(shù)據(jù)類型,final使數(shù)據(jù)恒定不變;對于對象引用镊绪,final是引用恒定不變匀伏。一旦引用指向某個對象,就不能再指向另一個對象蝴韭,但對象本身是可以修改的够颠,java沒提供使對象恒定不變的途徑。
    典型的常量定義方式:
    public static final VALUE_ONE;
    public指可用于包之外榄鉴,static強(qiáng)調(diào)只有一份 只在第一次創(chuàng)建對象時初始化一次履磨,final則說明是常量。

  • final方法
    將方法鎖定庆尘,以防任何繼承類修改它的定義剃诅。在繼承中使方法行為保持不變并且不會被覆蓋。

*final類
將整個類定義為final時驶忌,就表示不打算繼承該類矛辕,對該類的設(shè)計不需要做任何變動。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末付魔,一起剝皮案震驚了整個濱河市聊品,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌几苍,老刑警劉巖翻屈,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妻坝,居然都是意外死亡妖胀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門惠勒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赚抡,“玉大人,你說我怎么就攤上這事纠屋⊥砍迹” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵售担,是天一觀的道長赁遗。 經(jīng)常有香客問我,道長族铆,這世上最難降的妖魔是什么岩四? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哥攘,結(jié)果婚禮上剖煌,老公的妹妹穿的比我還像新娘材鹦。我一直安慰自己,他們只是感情好耕姊,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布桶唐。 她就那樣靜靜地躺著,像睡著了一般茉兰。 火紅的嫁衣襯著肌膚如雪尤泽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天规脸,我揣著相機(jī)與錄音坯约,去河邊找鬼。 笑死莫鸭,一個胖子當(dāng)著我的面吹牛闹丐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黔龟,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妇智,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氏身?” 一聲冷哼從身側(cè)響起巍棱,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛋欣,沒想到半個月后航徙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡陷虎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年到踏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚猿。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窝稿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凿掂,到底是詐尸還是另有隱情伴榔,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布庄萎,位于F島的核電站踪少,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糠涛。R本人自食惡果不足惜援奢,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望忍捡。 院中可真熱鬧集漾,春花似錦切黔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脓规。三九已至栽连,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侨舆,已是汗流浹背秒紧。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挨下,地道東北人熔恢。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像臭笆,于是被迫代替她去往敵國和親叙淌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法愁铺,類相關(guān)的語法鹰霍,內(nèi)部類的語法,繼承相關(guān)的語法茵乱,異常的語法茂洒,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)瓶竭,斷路器督勺,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 1、.java源文件: 一個以”.java“為后綴的源文件:只能有一個與文件名相同的類斤贰,可以包含其他類智哀。 2、類方...
    Hughman閱讀 1,466評論 1 9
  • 第一章 對象導(dǎo)論 對象具有狀態(tài)荧恍、行為和標(biāo)識瓷叫。這意味著每一個對象都可以擁有內(nèi)部數(shù)據(jù)和方法,并且每一個對象都可以唯一地...
    niaoge2016閱讀 823評論 0 0
  • 第七章 復(fù)用類 1. 組合語法 1)對于非基本類型的對象块饺,必須將其引用置于新的類中赞辩,但可以定義基本類型數(shù)據(jù)。2)每...
    FreeCode閱讀 578評論 0 0