組合與繼承

繼承的本質(zhì)就是避免重復(fù)藐守,extends 關(guān)鍵字實現(xiàn)繼承挪丢。繼承了父類的類擁有父類的一切功能和數(shù)據(jù),子類可以直接訪問父類中的非私有的屬性和行為卢厂。Java只支持單繼承乾蓬,不支持多繼承。

Java中的所有類都隱式繼承了Object類慎恒,Object類的重要方法有:equals()任内,作用是判斷一個對象是否等于另一個對象。
擁有自反性

x.equals(x)

對稱性

x.equals(y)
等價于
y.equals(x)

傳遞性

x.equals(y),y.equals(z)
等價于
x.equals(z)

非空

x.equals(null) 
將return false

toString()是對一個對象提供字符串表示的融柬。

繼承中的類結(jié)構(gòu)與初始化順序

初始化順序:父類的靜態(tài)變量-->父類的靜態(tài)代碼塊-->子類的靜態(tài)變量-->子類的靜態(tài)代碼快-->父類的非靜態(tài)變量(父類的非靜態(tài)代碼塊)-->父類的構(gòu)造函數(shù)-->子類的非靜態(tài)變量(子類的非靜態(tài)代碼塊)-->子類的構(gòu)造函數(shù)

值得注意的是:父類的非靜態(tài)變量(父類的非靜態(tài)代碼塊)是同一級的死嗦,看哪個部分寫在類的最前面誰就先被執(zhí)行,子類的非靜態(tài)變量(子類的非靜態(tài)代碼塊)也是一樣粒氧。

驗證代碼

package com.hts.test;


public class Test {
    public static void main(String[] args) {
        Child c=new Child();
    }
}
class Parent {
    public static PrintMessage a=new PrintMessage("父類靜態(tài)成員被初始化");
    private PrintMessage b=new PrintMessage("父類非靜態(tài)成員被初始化"); 
    static{
        System.out.println("父類的靜態(tài)代碼塊被執(zhí)行");
    }
    {
        System.out.println("父類的非靜態(tài)代碼塊被執(zhí)行");
    }
    public Parent(){
        System.out.println("父類的構(gòu)造方法被執(zhí)行");
    }   
}

class Child extends Parent{
    public static PrintMessage a1=new PrintMessage("子類靜態(tài)成員被初始化");
    private PrintMessage b1=new PrintMessage("子類非靜態(tài)成員被初始化");    
    
    static {
        System.out.println("子類的靜態(tài)代碼塊被執(zhí)行");
    }
    {
        System.out.println("子類的非靜態(tài)代碼塊被執(zhí)行");
    }
    public Child(){
        System.out.println("子類的構(gòu)造函數(shù)被執(zhí)行");
    }
}

class PrintMessage{
    public PrintMessage(String mes){
        System.out.println(mes);
    }
}

輸出結(jié)果

覆蓋/重寫

子類中出現(xiàn)與父類一模一樣的方法時(除了權(quán)限修飾符越除,權(quán)限修飾符大于等于不包括private,返回值類型,方法名和參數(shù)列表相同)摘盆,會出現(xiàn)覆蓋操作翼雀,也稱為重寫或者復(fù)寫。

覆蓋注意事項

  • 覆蓋時孩擂,子類方法權(quán)限一定要大于等于父類方法權(quán)限狼渊;
  • 靜態(tài)只能覆蓋靜態(tài)。
  • @OverRide 防止手殘造成錯誤 提示編譯器進行檢查
  • 子類的構(gòu)造方法中默認有一個super()类垦,所以囤锉,子類的初始化過程中,會先執(zhí)行父類的初始化护锤。

super和this有什么區(qū)別?
super是一個關(guān)鍵字,代表父類的存儲空間標識酿傍。(可以理解為父親的地址)

super和this的用法相似烙懦。

this代表對象的引用(誰調(diào)用就代表誰);
super代表當前子類對父類的引用赤炒。
1.成員變量

this.變量    --    本類的
super.變量    --    父類的

2.構(gòu)造方法

this(...)    --    本類的
super(...)    --    父類的

3.成員方法

this.方法名()    --    本類的    
super.方法名()    --    父類的
final關(guān)鍵字

可以聲明某個變量是不變的氯析,final是線程安全的。
用途 :

  • 使用在方法參數(shù)
  • 用于對象莺褒,對象指向的內(nèi)容可變掩缓,但是對象指向的東西不能改變(地址不能變)
  • 使用public static final 定義常量,提升代碼可讀性遵岩。命名約定:全大寫

final 修飾class 你辣,標志這個類就不可繼承了,JDK為什么有很多方法不能被繼承尘执?會破壞所有使用Integer類的地方
好處舍哄,可以保證沒人繼承,不會造成破壞我的約定誊锭,運行時方法是確定的表悬,不會有多態(tài)

單例模式

這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式丧靡。

這種模式涉及到一個單一的類蟆沫,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建温治。這個類提供了一種訪問其唯一的對象的方式饭庞,可以直接訪問,不需要實例化該類的對象罐盔。

注意

1但绕、單例類只能有一個實例。
2、單例類必須自己創(chuàng)建自己的唯一實例捏顺。
3六孵、單例類必須給所有其他對象提供這一實例。

優(yōu)點:

1幅骄、在內(nèi)存里只有一個實例劫窒,減少了內(nèi)存的開銷,尤其是頻繁的創(chuàng)建和銷毀實例(比如管理學(xué)院首頁頁面緩存)拆座。
2主巍、避免對資源的多重占用(比如寫文件操作)。

使用場景:

1挪凑、要求生產(chǎn)唯一序列號孕索。
2、WEB 中的計數(shù)器躏碳,不用每次刷新都在數(shù)據(jù)庫里加一次搞旭,用單例先緩存起來。
3菇绵、創(chuàng)建的一個對象需要消耗的資源過多肄渗,比如 I/O 與數(shù)據(jù)庫的連接等。

實現(xiàn)
步驟 1
創(chuàng)建一個 Singleton 類咬最。

SingleObject.java

public class SingleObject {
 
   //創(chuàng)建 SingleObject 的一個對象
   private static SingleObject instance = new SingleObject();
 
   //讓構(gòu)造函數(shù)為 private翎嫡,這樣該類就不會被實例化
   private SingleObject(){}
 
   //獲取唯一可用的對象
   public static SingleObject getInstance(){
      return instance;
   }
 
   public void showMessage(){
      System.out.println("Hello World!");
   }
}

步驟 2
從 singleton 類獲取唯一的對象。

SingletonPatternDemo.java

public class SingletonPatternDemo {
   public static void main(String[] args) {
 
      //不合法的構(gòu)造函數(shù)
      //編譯時錯誤:構(gòu)造函數(shù) SingleObject() 是不可見的
      //SingleObject object = new SingleObject();
 
      //獲取唯一可用的對象
      SingleObject object = SingleObject.getInstance();
 
      //顯示消息
      object.showMessage();
   }
}

步驟 3
執(zhí)行程序永乌,輸出結(jié)果:

Hello World!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惑申,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子翅雏,更是在濱河造成了極大的恐慌硝桩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枚荣,死亡現(xiàn)場離奇詭異碗脊,居然都是意外死亡,警方通過查閱死者的電腦和手機橄妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門衙伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人害碾,你說我怎么就攤上這事矢劲。” “怎么了慌随?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵芬沉,是天一觀的道長躺同。 經(jīng)常有香客問我,道長丸逸,這世上最難降的妖魔是什么蹋艺? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮黄刚,結(jié)果婚禮上捎谨,老公的妹妹穿的比我還像新娘。我一直安慰自己憔维,他們只是感情好涛救,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著业扒,像睡著了一般检吆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上程储,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天咧栗,我揣著相機與錄音,去河邊找鬼虱肄。 笑死,一個胖子當著我的面吹牛交煞,可吹牛的內(nèi)容都是我干的咏窿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼素征,長吁一口氣:“原來是場噩夢啊……” “哼集嵌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起御毅,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤根欧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后端蛆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凤粗,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年今豆,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫌拣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡呆躲,死狀恐怖异逐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情插掂,我是刑警寧澤灰瞻,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布腥例,位于F島的核電站,受9級特大地震影響酝润,放射性物質(zhì)發(fā)生泄漏燎竖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一袍祖、第九天 我趴在偏房一處隱蔽的房頂上張望底瓣。 院中可真熱鬧,春花似錦蕉陋、人聲如沸捐凭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茁肠。三九已至,卻和暖如春缩举,著一層夾襖步出監(jiān)牢的瞬間垦梆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工仅孩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留托猩,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓辽慕,卻偏偏與公主長得像京腥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子溅蛉,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

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