最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 抽象類的實例詳解

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

java 抽象類的實例詳解

前言:

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

我一般遇到新的概念都會問三個問題:

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

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

3.這個東西在用的過程中,有哪些關鍵點和細節(jié)點?(是的,也占20%)

上面三個問題搞清楚了,剩下的就是去用了。。。“無他,但手熟爾。”

一、第一個問題:抽象類有什么用?它存在的意義是什么?

這回答這個問題之前,先看一下動物界里的一個例子:首先,有一個父類Animal,接著有兩個子類,分別是鳥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("汪汪~汪汪~");
  }
}

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

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

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

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

這個問題相對簡單,就是語言設計者的一些規(guī)定,Java中規(guī)定用abstract來修飾抽象方法和抽象類。上面的Animal類寫成如下形式:

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

三、第三個問題:抽象類在用的過程中有哪些關鍵點?

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

1.抽象類中的抽象方法只能用public或protected修飾。因為,抽象方法來到世間就是為了讓子類繼承重寫的,而private屬性的方法不能被子類繼承,顯然矛盾。

2.抽象類不能創(chuàng)建對象,即不能實例化。因為,抽象類中包含沒有實現(xiàn)的抽象方法,是不完整的,所以不能用來創(chuàng)建對象。(有一種特殊情況,就是一個類中并沒有抽象方法,但是類class有abstract修飾,被聲明為抽象類,那么這個類也是抽象類,也不能實例化。)

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

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

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

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

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

相關文章

  • Java靜態(tài)方法不具有多態(tài)性詳解

    Java靜態(tài)方法不具有多態(tài)性詳解

    下面小編就為大家?guī)硪黄狫ava靜態(tài)方法不具有多態(tài)性詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數(shù)據(jù)庫表與 Java 對象,這篇文章主要介紹了MySQL 新增字段但 Java 實體未更新:潛在問題與解決方案,需要的朋友可以參考下
    2025-04-04
  • SpringBoot中web模版數(shù)據(jù)渲染展示的案例詳解

    SpringBoot中web模版數(shù)據(jù)渲染展示的案例詳解

    憑借 Spring Framework 的模塊、與你最喜歡的工具的大量集成以及插入你自己的功能的能力,Thymeleaf 是現(xiàn)代 HTML5 JVM Web 開發(fā)的理想選擇——盡管它還有更多功能,本文重點給大家介紹SpringBoot中web模版數(shù)據(jù)渲染展示,需要的朋友可以參考下
    2022-01-01
  • java中的空指針異常情況以及解決方案

    java中的空指針異常情況以及解決方案

    這篇文章主要介紹了java中的空指針異常情況以及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解SpringMVC中使用Interceptor攔截器

    詳解SpringMVC中使用Interceptor攔截器

    SpringMVC 中的Interceptor 攔截器也是相當重要和相當有用的,它的主要作用是攔截用戶的請求并進行相應的處理,這篇文章主要介紹了詳解SpringMVC中使用Interceptor攔截器,有興趣的可以了解一下。
    2016-12-12
  • Java實現(xiàn)字符串轉換成可執(zhí)行代碼的方法

    Java實現(xiàn)字符串轉換成可執(zhí)行代碼的方法

    今天小編就為大家分享一篇Java實現(xiàn)字符串轉換成可執(zhí)行代碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Maven pom的distributionManagement配置方式

    Maven pom的distributionManagement配置方式

    文章主要介紹了Maven的distributionManagement配置方式,以及它的作用、配置方法和重要性,distributionManagement用于指定構件的發(fā)布位置,包括下載URL、狀態(tài)等,文章還詳細解釋了如何配置repository和snapshotRepository,以及它們的用途和區(qū)別
    2025-01-01
  • Java深入了解數(shù)據(jù)結構之二叉搜索樹增 插 刪 創(chuàng)詳解

    Java深入了解數(shù)據(jù)結構之二叉搜索樹增 插 刪 創(chuàng)詳解

    二叉搜索樹是以一棵二叉樹來組織的。每個節(jié)點是一個對象,包含的屬性有l(wèi)eft,right,p和key,其中,left指向該節(jié)點的左孩子,right指向該節(jié)點的右孩子,p指向該節(jié)點的父節(jié)點,key是它的值
    2022-01-01
  • Java虛擬機內(nèi)存分配與回收策略問題精細解讀

    Java虛擬機內(nèi)存分配與回收策略問題精細解讀

    Java技術體系中所提倡的自動內(nèi)存管理最終可以歸結為自動化地解決了兩個問題:給對象分配內(nèi)存以及回收分配給對象的內(nèi)存,本文讓我們來詳細了解
    2021-11-11
  • JAVA 繼承基本類、抽象類、接口介紹

    JAVA 繼承基本類、抽象類、接口介紹

    Java是一個面向對象的語言,java面向對象一般有三大特征:封裝、繼承、多態(tài)
    2013-01-01

最新評論

琼结县| 洪洞县| 永和县| 沧源| 修武县| 常州市| 蓬莱市| 石楼县| 宁都县| 府谷县| 桐城市| 西畴县| 三穗县| 辛集市| 南漳县| 集贤县| 驻马店市| 永春县| 班玛县| 岳普湖县| 铁力市| 鹤山市| 易门县| 喀喇| 北安市| 珲春市| 义马市| 贵州省| 镇巴县| 勐海县| 奉新县| 芜湖市| 当涂县| 中宁县| 凤庆县| 得荣县| 邻水| 绵阳市| 师宗县| 仁化县| 莱阳市|