亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java 抽象類(lèi)的實(shí)例詳解

 更新時(shí)間:2017年09月03日 08:49:42   作者:可比克番茄  
這篇文章主要介紹了java 抽象類(lèi)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下

java 抽象類(lèi)的實(shí)例詳解

前言:

什么是抽象類(lèi)?這名字聽(tīng)著就挺抽象的,第一次聽(tīng)到這個(gè)名字還真有可能被唬住。但是,就像老人家所說(shuō)的,一切反動(dòng)派都是紙老虎,一切有著裝x名字的概念也是紙老虎。好吧,我們已經(jīng)從戰(zhàn)略上做到了藐視它,現(xiàn)在就要戰(zhàn)術(shù)上重視它,如同要解決紙老虎,就要一個(gè)牙齒一個(gè)牙齒地敲,一個(gè)爪子一個(gè)爪子地拔;解決這種抽象概念也一樣,先要把它具體化,細(xì)分化,然后一個(gè)一個(gè)地來(lái)。

我一般遇到新的概念都會(huì)問(wèn)三個(gè)問(wèn)題:

1.這個(gè)東西有什么用?用來(lái)干什么的?它的意義在哪里?(顯然,如果是沒(méi)用的東西,就沒(méi)必要浪費(fèi)時(shí)間了;其實(shí),弄懂了這個(gè)問(wèn)題,就掌握了60%)

2.這個(gè)概念或者技能點(diǎn)怎么用?也就是它的表現(xiàn)形式,如關(guān)鍵字、修飾詞、語(yǔ)法什么的。。。(這個(gè)占20%)

3.這個(gè)東西在用的過(guò)程中,有哪些關(guān)鍵點(diǎn)和細(xì)節(jié)點(diǎn)?(是的,也占20%)

上面三個(gè)問(wèn)題搞清楚了,剩下的就是去用了。。?!盁o(wú)他,但手熟爾?!?/p>

一、第一個(gè)問(wèn)題:抽象類(lèi)有什么用?它存在的意義是什么?

這回答這個(gè)問(wèn)題之前,先看一下動(dòng)物界里的一個(gè)例子:首先,有一個(gè)父類(lèi)Animal,接著有兩個(gè)子類(lèi),分別是鳥(niǎo)Bird和狗Dog,如下:

public class Animal{
  public void bark(){}
}
public class Bird extends Animal{
  public void bark(){
    System.out.println("唧唧~唧唧~");
  }
}
public class Dog extends Animal{
  public void bark(){
    System.out.println("汪汪~(yú)汪汪~(yú)");
  }
}

可以看到,父類(lèi)Animal有一個(gè)叫喚的方法bark(),兩個(gè)子類(lèi)都繼承了這個(gè)方法,并進(jìn)行了重寫(xiě),Bird是唧唧叫,Dog是汪汪叫,現(xiàn)在的問(wèn)題是Animal怎么叫?它的bark()方法體里應(yīng)該輸出什么樣的叫聲,是“汪汪”還是“唧唧”?

顯然,動(dòng)物是個(gè)抽象的集合名詞,我們并不知道動(dòng)物Animal怎么叫,所以,bark()方法在父類(lèi)中實(shí)現(xiàn)不了,或者說(shuō)實(shí)現(xiàn)了沒(méi)有任何意義,bark()方法只能在子類(lèi)中根據(jù)具體情況去實(shí)現(xiàn)。這樣的話就可以把父類(lèi)Animal中的bark()方法聲明為abstract抽象方法,此時(shí)這個(gè)類(lèi)也成了abstract抽象類(lèi)。

至此,也就可以回答第一個(gè)問(wèn)題,抽象類(lèi)用來(lái)做什么的?抽象類(lèi)自己并不能實(shí)例化,它存在的意義就是為了讓子類(lèi)繼承。對(duì)于一個(gè)父類(lèi),它的某個(gè)方法在父類(lèi)中實(shí)現(xiàn)沒(méi)有任何意義,必需在子類(lèi)中根據(jù)具體情況實(shí)現(xiàn),那么這個(gè)方法可以聲明為abstract抽象方法,此時(shí)這個(gè)父類(lèi)也成了abstract抽象類(lèi)。(當(dāng)然,你也許會(huì)想,就像上面那樣,函數(shù)的花括弧里為空不也可以?是的,語(yǔ)法上沒(méi)毛病,甚至用法上也沒(méi)毛病,但一般還是把它抽象成abstract方法。原因有三點(diǎn):1.就像上面說(shuō)的,這樣弄“實(shí)現(xiàn)了沒(méi)有任何意義”;2.Java里面不鼓勵(lì)函數(shù)體的內(nèi)容為空;3.用法上子類(lèi)繼承父類(lèi)后,子類(lèi)會(huì)被強(qiáng)制重寫(xiě)父類(lèi)中的抽象方法,起到一個(gè)提醒和約束的作用。)

二、第二個(gè)問(wèn)題:抽象類(lèi)怎么用?表現(xiàn)形式是什么樣的?

這個(gè)問(wèn)題相對(duì)簡(jiǎn)單,就是語(yǔ)言設(shè)計(jì)者的一些規(guī)定,Java中規(guī)定用abstract來(lái)修飾抽象方法和抽象類(lèi)。上面的Animal類(lèi)寫(xiě)成如下形式:

 public abstract class Animal{
   public abstract void bark();
}

三、第三個(gè)問(wèn)題:抽象類(lèi)在用的過(guò)程中有哪些關(guān)鍵點(diǎn)?

抽象類(lèi)并不是只能包含抽象方法,他也可以包含普通的成員方法和成員變量。它和普通類(lèi)的區(qū)別主要有三點(diǎn):

1.抽象類(lèi)中的抽象方法只能用public或protected修飾。因?yàn)椋橄蠓椒▉?lái)到世間就是為了讓子類(lèi)繼承重寫(xiě)的,而private屬性的方法不能被子類(lèi)繼承,顯然矛盾。

2.抽象類(lèi)不能創(chuàng)建對(duì)象,即不能實(shí)例化。因?yàn)椋橄箢?lèi)中包含沒(méi)有實(shí)現(xiàn)的抽象方法,是不完整的,所以不能用來(lái)創(chuàng)建對(duì)象。(有一種特殊情況,就是一個(gè)類(lèi)中并沒(méi)有抽象方法,但是類(lèi)class有abstract修飾,被聲明為抽象類(lèi),那么這個(gè)類(lèi)也是抽象類(lèi),也不能實(shí)例化。)

3.如果一個(gè)類(lèi)繼承于一個(gè)抽象類(lèi),那么子類(lèi)必須實(shí)現(xiàn)父類(lèi)的抽象方法。否則,子類(lèi)繼承的方法還是抽象方法,子類(lèi)也變成了抽象類(lèi),要用abstract修飾。(這就好比父母從小 have a dream,就是考大學(xué),但是由于他們生活的年代、環(huán)境、個(gè)人能力等因素,總之沒(méi)實(shí)現(xiàn),于是他們將這個(gè)夢(mèng)想讓自己孩子繼承,并要求他們實(shí)現(xiàn),至于你具體是考清華大學(xué),還是考長(zhǎng)江大學(xué),那就 Let it be 了。。。當(dāng)然,如果兒子不實(shí)現(xiàn),就會(huì)變成抽象類(lèi),再讓孫子繼承和實(shí)現(xiàn)。。。)

在其他方面,抽象類(lèi)和普通類(lèi)并無(wú)區(qū)別。最后,再來(lái)個(gè)例子:

public abstract class Animal {  //抽象類(lèi)中可以有非抽象方法,也可以有成員變量
  private int a = 10;
  
  public abstract void bark();      //如果沒(méi)有此抽象方法,但是class前有absract修飾,也是抽象類(lèi),也不能實(shí)例化
  public void say() {            //普通成員方法
    System.out.println("我是抽象類(lèi)中的非抽象方法,此抽象類(lèi)中的私有成員變量a= " + a);
  }

  public int getA() {
    return a;
  }
  public void setA(int a) {
    this.a = a;
  }
}
public class Dog extends Animal{
  public void bark() {        //子類(lèi)實(shí)現(xiàn)Animal的抽象方法
    System.out.println("汪汪~(yú)汪汪~(yú)");  
    System.out.println("我是子類(lèi),不能直接調(diào)用父類(lèi)的私有變量a  :(");  
    System.out.println("我是子類(lèi),只有通過(guò)super.getA()調(diào)用父類(lèi)的私有變量a:" + super.getA());  
  }
}
public class Test {
  public static void main(String[] args) {
    Dog dog = new Dog();
    dog.say();    //子類(lèi)繼承調(diào)用Animal的普通成員方法
    dog.bark();    //子類(lèi)調(diào)用已經(jīng)實(shí)現(xiàn)過(guò)的方法
  }
}

以上就是對(duì)java抽象類(lèi)的實(shí)例詳解,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Spring Aware標(biāo)記接口使用案例解析

    Spring Aware標(biāo)記接口使用案例解析

    這篇文章主要介紹了Spring Aware標(biāo)記接口使用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • EasyExcel自定義下拉注解的三種實(shí)現(xiàn)方式總結(jié)

    EasyExcel自定義下拉注解的三種實(shí)現(xiàn)方式總結(jié)

    使用EasyExcel設(shè)置下拉數(shù)據(jù)時(shí),每次都要?jiǎng)?chuàng)建一個(gè)SheetWriteHandler組件確實(shí)比較繁瑣,為了優(yōu)化這個(gè)過(guò)程,我們可以通過(guò)自定義注解來(lái)簡(jiǎn)化操作,下面就來(lái)看看具體實(shí)現(xiàn)方法吧
    2024-10-10
  • spring boot攔截器注入不了java bean的原因

    spring boot攔截器注入不了java bean的原因

    這篇文章主要介紹了spring boot攔截器注入不了java bean的原因,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java設(shè)計(jì)模式之享元模式

    Java設(shè)計(jì)模式之享元模式

    這篇文章介紹了Java設(shè)計(jì)模式之享元模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • mybatis實(shí)現(xiàn)一對(duì)一關(guān)聯(lián)映射實(shí)例代碼

    mybatis實(shí)現(xiàn)一對(duì)一關(guān)聯(lián)映射實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于mybatis實(shí)現(xiàn)一對(duì)一關(guān)聯(lián)映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Spring框架的環(huán)境搭建和測(cè)試實(shí)現(xiàn)

    Spring框架的環(huán)境搭建和測(cè)試實(shí)現(xiàn)

    這篇文章主要介紹了Spring框架的環(huán)境搭建和測(cè)試實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 一小時(shí)迅速入門(mén)Mybatis之增刪查改篇

    一小時(shí)迅速入門(mén)Mybatis之增刪查改篇

    這篇文章主要介紹了迅速入門(mén)Mybatis之增刪查改篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java 實(shí)現(xiàn)簡(jiǎn)易教務(wù)管理系統(tǒng)的代碼

    Java 實(shí)現(xiàn)簡(jiǎn)易教務(wù)管理系統(tǒng)的代碼

    這篇文章主要介紹了Java 實(shí)現(xiàn)簡(jiǎn)易教務(wù)管理系統(tǒng)的代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot中的@ApiModelProperty注解作用

    SpringBoot中的@ApiModelProperty注解作用

    這篇文章主要介紹了SpringBoot中的@ApiModelProperty注解作用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 在logback.xml中自定義動(dòng)態(tài)屬性的方法

    在logback.xml中自定義動(dòng)態(tài)屬性的方法

    這篇文章主要介紹了在logback.xml中自定義動(dòng)態(tài)屬性的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08

最新評(píng)論