面向對象基礎

1.方法

可變參數(shù)

類型...定義,可變參數(shù)相當于數(shù)組類型:

class Group {
    private String[] names;

    public void setNames(String... names) {
        this.names = names;
    }
}

2.構造方法

  • 如果我們自定義了一個構造方法旨巷,那么强缘,編譯器就不再自動創(chuàng)建默認構造方法
  • 可以定義多個構造方法,編譯器根據(jù)參數(shù)自動判斷
  • 可以在一個構造方法內部調用另一個構造方法察皇,便于代碼復用

3.方法重載

  • 方法名相同茴厉,但各自的參數(shù)不同,稱為方法重載(Overload)什荣。
  • 注意:方法重載的返回值類型通常都是相同的矾缓。
  • 方法重載的目的是,功能類似的方法使用同一名字稻爬,更容易記住嗜闻,因此,調用起來更簡單桅锄。

4.繼承

Protected

繼承有個特點琉雳,就是子類無法訪問父類的private字段或者private方法.

為了讓子類可以訪問父類的字段样眠,我們需要把private改為protected。用protected修飾的字段可以被子類訪問.

protected關鍵字可以把字段和方法的訪問權限控制在繼承樹內部

Super

表示父類,主要用于子類的構造方法中

  • 子類不會繼承任何父類的構造方法.

  • 如果沒有明確地調用父類的構造方法翠肘,編譯器會幫我們自動加一句super();,這樣做會有風險,因為自動加入的super()構造方法可能不存在檐束。必須手動調用存在的某個構造方法。

向上轉型和向下轉型

把一個子類類型安全地變?yōu)楦割愵愋偷馁x值束倍,被稱為向上轉型(upcasting)被丧。

Student s = new Student();
Person p = s; // upcasting, ok
Object o1 = p; // upcasting, ok
Object o2 = s; // upcasting, ok

和向上轉型相反,如果把一個父類類型強制轉型為子類類型绪妹,就是向下轉型(downcasting)甥桂。

Person p1 = new Student(); // upcasting, ok
Person p2 = new Person();
Student s1 = (Student) p1; // ok
Student s2 = (Student) p2; // runtime error! ClassCastException!

向下轉型很可能會失敗。失敗的時候邮旷,Java虛擬機會報ClassCastException黄选。

為了避免向下轉型出錯,Java提供了instanceof操作符廊移,可以先判斷一個實例究竟是不是某種類型

Person p = new Student();
if (p instanceof Student) {
    // 只有判斷成功才會向下轉型:
    Student s = (Student) p; // 一定會成功
}

從Java 14開始糕簿,判斷instanceof后探入,可以直接轉型為指定變量狡孔,避免再次強制轉型。

    public static void main(String[] args) {
        Object obj = "hello";
        if (obj instanceof String s) {
            // 可以直接使用變量s:
            System.out.println(s.toUpperCase());
        }
    }

5.多態(tài)

覆寫Override

  • 子類重寫了父類的方法稱為覆寫蜂嗽。

  • 加上@Override可以讓編譯器幫助檢查是否進行了正確的覆寫苗膝。

多態(tài)

  • 多態(tài)是指,針對某個類型的方法調用植旧,其真正執(zhí)行的方法取決于運行時期實際類型的方法辱揭。

  • 多態(tài)具有一個非常強大的功能,就是允許添加更多類型的子類實現(xiàn)功能擴展病附,卻不需要修改基于父類的代碼

  • 在子類的覆寫方法中问窃,如果要調用父類的被覆寫的方法,可以通過super來調用

final修飾符有多種作用

  • final修飾的方法可以阻止被覆寫完沪;
  • final修飾的class可以阻止被繼承域庇;
  • final修飾的field必須在創(chuàng)建對象時初始化,隨后不可修改覆积。

6.抽象

問題:由于多態(tài)的存在父類的方法可能沒有實際意義听皿,需要去掉父類的方法,但不能正真的去掉宽档,因為會失去多態(tài)的特性尉姨。

解決:我們可以為父類方法聲明abstract方法,但同時也必須將父類聲明為抽象類,才能正確編譯它吗冤。

abstract class Person {
    public abstract void run();
}

抽象類的作用:強迫子類實現(xiàn)其定義的抽象方法,抽象方法實際上相當于定義了“規(guī)范”又厉。

面向抽象編程:使得調用者只關心抽象方法的定義九府,不關心子類的具體實現(xiàn)。


7.接口

在抽象類中馋没,抽象方法本質上是定義接口規(guī)范:即規(guī)定高層類的接口昔逗,從而保證所有子類都有相同的接口實現(xiàn),這樣篷朵,多態(tài)就能發(fā)揮出威力勾怒。

如果一個抽象類沒有字段(可以有靜態(tài)字段),所有方法全部都是抽象方法(可以有default方法)声旺,就可以把該抽象類改寫為接口:interface笔链。

接口繼承

  • 一個interface可以繼承多個interface.

default方法

  • 實現(xiàn)類可以不必覆寫default方法。

  • default方法和抽象類的普通方法是有所不同的腮猖。因為interface沒有字段鉴扫,default方法無法訪問字段,而抽象類的普通方法可以訪問實例字段澈缺。


8.靜態(tài)字段和靜態(tài)方法

使用static修飾坪创。

靜態(tài)字段

  • 所有實例共享該字段
  • 不推薦用實例變量.靜態(tài)字段去訪問靜態(tài)字段
  • 推薦用類名來訪問靜態(tài)字段

靜態(tài)方法

  • 調用靜態(tài)方法不需要實例,通過類名就可以調用姐赡,無法訪問this莱预,但可以訪問靜態(tài)字段和其他靜態(tài)方法

  • 靜態(tài)態(tài)方法常用于工具類和輔助方法。

接口的靜態(tài)字段

因為interface是一個純抽象類项滑,所以它不能定義實例字段依沮。但是,interface是可以有靜態(tài)字段的枪狂,并且靜態(tài)字段必須為final類型:

public interface Person {
    public static final int MALE = 1;
    public static final int FEMALE = 2;
}

實際上危喉,因為interface的字段只能是public static final類型,所以我們可以把這些修飾符都去掉州疾,上述代碼可以簡寫為:

public interface Person {
    // 編譯器會自動加上public statc final:
    int MALE = 1;
    int FEMALE = 2;
}

編譯器會自動把該字段變?yōu)?code>public static final類型辜限。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市严蓖,隨后出現(xiàn)的幾起案子薄嫡,更是在濱河造成了極大的恐慌,老刑警劉巖谈飒,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岂座,死亡現(xiàn)場離奇詭異,居然都是意外死亡杭措,警方通過查閱死者的電腦和手機费什,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸳址,你說我怎么就攤上這事瘩蚪。” “怎么了稿黍?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵疹瘦,是天一觀的道長。 經常有香客問我巡球,道長言沐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任酣栈,我火速辦了婚禮险胰,結果婚禮上,老公的妹妹穿的比我還像新娘矿筝。我一直安慰自己起便,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布窖维。 她就那樣靜靜地躺著榆综,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铸史。 梳的紋絲不亂的頭發(fā)上鼻疮,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音沛贪,去河邊找鬼陋守。 笑死震贵,一個胖子當著我的面吹牛利赋,可吹牛的內容都是我干的。 我是一名探鬼主播猩系,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媚送,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寇甸?” 一聲冷哼從身側響起塘偎,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拿霉,沒想到半個月后吟秩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡绽淘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年涵防,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沪铭。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壮池,死狀恐怖偏瓤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情椰憋,我是刑警寧澤厅克,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站橙依,受9級特大地震影響证舟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜窗骑,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一褪储、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慧域,春花似錦鲤竹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至互订,卻和暖如春吱肌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仰禽。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工氮墨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吐葵。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓规揪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親温峭。 傳聞我的和親對象是個殘疾皇子猛铅,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容