2019-06-29 Java面向?qū)ο蟮某绦蛟O(shè)計(jì)(二)

類的繼承性

類的繼承性表現(xiàn)為子類繼承父類相關(guān)的數(shù)據(jù)成員和成員方法。

類的多態(tài)性

多態(tài)是指同名的不同方法根據(jù)發(fā)送消息的對象以及方法傳送參數(shù)的不同攀痊,采取不同的行為方式的特性义图。
“一個(gè)接口栖忠,多種方法”
Java中提供兩種多態(tài)機(jī)制:覆蓋個(gè)重載

一序苏、覆蓋和重載

方法的覆蓋和重載時(shí)Java多態(tài)性的不同表現(xiàn)手幢。
覆蓋也可叫做重寫,是父類與子類之間多態(tài)性的一種表現(xiàn)忱详。(子類重新定義父類)
重載是一個(gè)類中多態(tài)性的一種表現(xiàn)。(同一類中定義多個(gè)構(gòu)造方法)

1. 方法的覆蓋

如果在子類中定義某方法與其父類有相同的名稱和參數(shù)跺涤,則該方法覆蓋(重寫)父類中的方法匈睁。
例:override.java

class A{
    public int getval() {
        return(5);
    }
}
class B extends A{
    public int getval() {
        return(10);
    }
}
public class override {
    public static void main(String args[]) {
        B b=new B();
        System.out.println(b.getval());
    }

}

運(yùn)行結(jié)果:

10
  • 上轉(zhuǎn)型對象
    1)上轉(zhuǎn)型對象不能操作子類新增的成員變量和子類新增的方法。
    2)上轉(zhuǎn)型對象可以操作子類繼承或重寫的成員變量桶错,也可以使用子類繼承或重寫的方法航唆。
    3)如果子類重寫了父類某個(gè)方法后,當(dāng)對象的上轉(zhuǎn)型對象調(diào)用這個(gè)方法一定是調(diào)用了這個(gè)重寫的方法院刁。
  • 覆蓋方法的調(diào)用原則:
    1)父類被覆蓋的方法的聲明必要和子類的同名方法的聲明完全匹配糯钙,才能達(dá)到覆蓋的效果。
    2)覆蓋的方法的返回值必須和被覆蓋的方法的返回值一致退腥。
    3)被覆蓋的方法不能private任岸,否則在其子類中只是新定義了一個(gè)方法,并沒有對其進(jìn)行覆蓋狡刘,因?yàn)樾揎椃麨閜rivate的方法享潜,子類不能從父類繼承,所以覆蓋也不存在了嗅蔬。
    4)當(dāng)Java程序運(yùn)行時(shí)剑按,系統(tǒng)根據(jù)調(diào)用該方法的對象,來決定實(shí)際調(diào)用的是子類還是父類的方法澜术。
    5)重寫后的方法不能比被重寫的方法有更嚴(yán)格的訪問權(quán)限(可以相同)艺蝴。
    6)重寫后的方法不能比重寫的方法產(chǎn)生更多的例外,即拋出更多的異常鸟废。
    例:
class A{
      void f() throws IOException{//f()為default類型猜敢,拋出IOException
             //方法體  
      }
}
class B extends A{
        private void f() throws Exception{ //此處有兩個(gè)錯(cuò)誤
       //一是private權(quán)限小于default,二是Exception異常比IOException 
       //異常范圍大,因?yàn)镋xception包含IOException
        }
}

2. 方法的重載

如果一個(gè)類中定義了多個(gè)同名的方法锣枝,它們或有不同的參數(shù)個(gè)數(shù)厢拭,或有不同的參數(shù)類型,或有不同的參數(shù)次序撇叁,則稱為方法的重載供鸠。

3. 覆蓋與重載的區(qū)別

1)方法的覆蓋是子類和父類之間的關(guān)系,重載是同一類內(nèi)部多個(gè)方法間的關(guān)系陨闹。
2)方法的覆蓋一般是兩個(gè)方法的覆蓋楞捂,重載時(shí)可能有多個(gè)重載方法。
3)覆蓋的方法有相同的方法名和形參表趋厉,重載的方法只能有相同的方法名寨闹,不能有相同的形參表。
4)覆蓋是區(qū)分方法的是根據(jù)調(diào)用它的對象君账,而重載是根據(jù)形參來決定調(diào)用的是哪個(gè)方法繁堡。
5)用final修飾的方法是不能被子類覆蓋的,只能被重載乡数。

二椭蹄、運(yùn)行時(shí)多態(tài)

多態(tài)分為兩種:編譯時(shí)多態(tài),運(yùn)行時(shí)多態(tài)

1.通過繼承父類對象的引用變量來引用子類對象的方法來實(shí)現(xiàn)

例:test.java

class superA{
    void fun() {
        System.out.println("this is superA");
    }
}
class subB extends superA{
    void fun() {
        System.out.println("this is subB");
    }
}
class subC extends superA{
    void fun() {
        System.out.println("this is subC");
    }
}
public class test {
    public static void main(String args[]) {
        superA a;  //聲明a屬于superA
        subB b=new subB();
        subC c=new subC();
        a=b;
        a.fun();
        a=c;
        a.fun();
    }
}

運(yùn)行結(jié)果:

this is subB
this is subC

2. 通過接口類型變量引用實(shí)現(xiàn)接口的類的對象來實(shí)現(xiàn)

例:test2.java

interface InterA{
    void fun();
}
class b implements InterA{
    public void fun() {
        System.out.println("this is b");
    }
}
class c implements InterA{
    public void fun() {
        System.out.println("this is c");
    }
}
public class test2 {
    public static void main(String args[]) {
        InterA a;
        a=new b();
        a.fun();
        a=new c();
        a.fun();
    }
}

靜態(tài)修飾符净赴、靜態(tài)數(shù)據(jù)成員绳矩、靜態(tài)成員方法

一、靜態(tài)修飾符

static稱為靜態(tài)修飾符玖翅,可以修飾類中的數(shù)據(jù)成員和成員方法翼馆,有些面向?qū)ο笳Z言使用了類數(shù)據(jù)成員和類方法這兩個(gè)術(shù)語。
要將數(shù)據(jù)成員或成員方法設(shè)為static金度,只需要在定義時(shí)設(shè)置這個(gè)關(guān)鍵字即可应媚。

二、靜態(tài)數(shù)據(jù)成員

三审姓、靜態(tài)常量

用關(guān)鍵字static修飾的常量為類常量珍特;沒有關(guān)鍵字修飾的常量為實(shí)例常量。為提高效率魔吐,應(yīng)當(dāng)創(chuàng)建常量扎筒,或者說是final static字段。

靜態(tài)成員方法

static修飾符修飾的屬性是類的公共屬性酬姆。
在靜態(tài)方法中不能調(diào)用非靜態(tài)的方法和引用非靜態(tài)的成員變量嗜桌,反之則可以。

抽象類和最終類

一辞色、抽象類

當(dāng)一個(gè)類被聲明為abstract時(shí)骨宠,這個(gè)類就是抽象類,抽象類就是沒有具體實(shí)例對象的類。
abstract是抽象修飾符层亿,可以用來修飾類和方法桦卒。
抽象類需注意規(guī)則:
1)抽象類不能直接實(shí)例化,并且對抽象類使用new運(yùn)算符是編譯時(shí)錯(cuò)誤匿又。
2)抽象類的數(shù)據(jù)成員和成員方法都是其子類的公共數(shù)據(jù)成員和方法的集合方灾。
3)抽象類中既存在抽象方法,也存在一般方法碌更。
4)對于父類中的抽象方法是通過子類覆蓋父類抽象方法的形式來實(shí)現(xiàn)繼承的裕偿,子類必須實(shí)現(xiàn)父類的所有抽象方法,否則該子類必須仍然定義為抽象類痛单。即如果定義一個(gè)具體子類繼承于某個(gè)抽象父類嘿棘,那么該子類必須實(shí)現(xiàn)抽象父類中的抽象方法。
5)抽象類不能被密封(注意abstract修飾方法時(shí)不能和static旭绒、final鸟妙、native、private一起使用)。
例: employee.java

abstract class printmechine{
    abstract public void print(int x);
}
public class employee extends printmechine{
    int a;
    public employee(int a) {
        this.a=a;
    }
    public void print(int a) {
        System.out.println(a*2);
    }
    public static void main(String args[]) {
        printmechine p=new employee(3);
        p.print(3);
    }
}

二、最終類

如果用final修飾成員變量直秆,會(huì)使改變量成為常量船庇。如果用來修飾成員方法,表示該方法無法在子類中被覆蓋个从。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脉幢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗦锐,更是在濱河造成了極大的恐慌嫌松,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奕污,死亡現(xiàn)場離奇詭異萎羔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)碳默,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門贾陷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘱根,你說我怎么就攤上這事髓废。” “怎么了该抒?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵慌洪,是天一觀的道長。 經(jīng)常有香客問我,道長冈爹,這世上最難降的妖魔是什么涌攻? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮频伤,結(jié)果婚禮上恳谎,老公的妹妹穿的比我還像新娘。我一直安慰自己剂买,他們只是感情好惠爽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞬哼,像睡著了一般婚肆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坐慰,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天较性,我揣著相機(jī)與錄音,去河邊找鬼结胀。 笑死赞咙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的糟港。 我是一名探鬼主播攀操,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼秸抚!你這毒婦竟也來了速和?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剥汤,失蹤者是張志新(化名)和其女友劉穎颠放,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吭敢,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碰凶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鹿驼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欲低。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蠢沿,靈堂內(nèi)的尸體忽然破棺而出伸头,到底是詐尸還是另有隱情,我是刑警寧澤舷蟀,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布恤磷,位于F島的核電站面哼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏扫步。R本人自食惡果不足惜魔策,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望河胎。 院中可真熱鬧闯袒,春花似錦、人聲如沸游岳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胚迫。三九已至喷户,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間访锻,已是汗流浹背褪尝。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留期犬,地道東北人河哑。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像龟虎,于是被迫代替她去往敵國和親璃谨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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