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

java之抽象類和繼承抽象類解讀

 更新時間:2023年11月30日 15:36:25   作者:wj振藩  
這篇文章主要介紹了java之抽象類和繼承抽象類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

抽象類和繼承抽象類

抽象類不能直接實(shí)例化,需要創(chuàng)建一個指向自己的對象引用(其子類)來實(shí)例化

代碼:

public class Main
{
    public static void main(String[] args)
    {
        /* People people = new People(); */ //錯誤
        People p = new Man();
        p.eat();
        p.drink();
        /* p.palyGames() */ //此方法錯誤
        Man man = new Man();
        man.eat();
        man.playGames();
        Women women = new Women();
        women.eat();
        women.dressing();
    }
    abstract static class People{
        String name;
        int age;
        float height;
        float weight;
        public void eat(){
            System.out.println("人都會吃飯");
        }
        public abstract void drink();
    }
    static class Man extends People{
        float short_hair;
        public void playGames(){
            System.out.println("男的獨(dú)有的打游戲技能");
        }
        @Override
        public void drink(){
            System.out.println("man drink 酒");
        }
    }
    static class Women extends People{
        float long_hair;
        public void dressing(){
            System.out.println("女的獨(dú)有的化妝技能");
        }
        @Override
        public void drink(){
            System.out.println("women drink 飲料");
        }
    }
}

這里People不能直接實(shí)例化,如果是People p = new Man();

這里p只能調(diào)用People類n抽象方法和成果調(diào)用了其抽象方法,則訪問的是其引用類(子類)

繼承的抽象類;

如果是Man man= new Man();

這里man是可以調(diào)用類Man和其繼承的抽象類People的方法和屬性


這里寫圖片描述

抽象類、普通類、接口的區(qū)別

概念:

抽象類和具體類是相對的概念。“抽象”是一種存在思想邏輯中的概念,而“具體”是一種可見可觸摸的現(xiàn)實(shí)對象。

簡單說,比如“人”比“男人”抽象一點(diǎn),“動物”又比“人”更抽象一點(diǎn),而“生物”又比“動物”更抽象。  

抽象的概念是由具體概念依其“共性”而產(chǎn)生的,把具體概念的諸多個性排出,集中描述其共性,就會產(chǎn)生一個抽象性的概念。

抽象思維,是人類思維達(dá)到高級階段產(chǎn)生的一種能力,例如,當(dāng)小孩子思維尚未成熟時,他們只能掌握具體概念,他們在學(xué)習(xí)代詞“你、我、他”時往往遇到困難,因?yàn)榇~具有較高的抽象性。

總之,抽象概念的外延大,內(nèi)涵?。痪唧w概念的外延小,內(nèi)涵大。

一、抽象類與普通類

(1)普通類可以去實(shí)例化調(diào)用;抽象類不能被實(shí)例化,因?yàn)樗谴嬖谟谝环N概念而不非具體。

(2)普通類和抽象類都可以被繼承,但是抽象類被繼承后子類必須重寫繼承的方法,除非自類也是抽象類。

(3)實(shí)例演示:

public class Pet {
 
public void play(){                //這是寵物類,普通父類,方法里是空的
}
}
--------------------------
public class Cat extends Pet {    //這是子類,是一個貓類,重寫了父類方法
public void play(){
  System.out.println("1、貓爬樹");
}
}
------------------------
public class Dog extends Pet {    //這是子類,是一個狗類,重寫了父類方法
  public void play(){
  System.out.println("2、狗啃骨頭");
 }
}
-------------------------
public class Test {
public static void main(String[] args) {  //這是測試類,分別調(diào)用了子類的不同方法
 
Pet p1=new Cat();                               //多典型的多態(tài)表現(xiàn)啊,相當(dāng)?shù)慕o力
Pet p2=new Dog();
 
p1.play();
p2.play();
}
}

-----------------------
輸出結(jié)果:
1、貓爬樹
2、狗啃骨頭
-----------------------

問:

把父類改成抽象類,方法改成抽象方法,那么public void play();  子類不變,依然重寫父類方法,那這個跟普通父類沒區(qū)別???難道說就一個抽象方法沒方法體就完事了??那我普通方法有方法體,我空著不寫內(nèi)容不就得了,不跟抽象方法一個樣嗎??別跟我說抽象類還不能實(shí)例化,哥也不需要去new它!普通類都能搞定的,還弄個抽象類有什么意義?我前面都說了普通類的方法我可以空著不寫,達(dá)到跟抽象類方法沒方法體一樣的效果。既然兩種方式都能達(dá)到同一個輸出效果,弄一種方式不就得了,那為什么還要創(chuàng)造出一個抽象類出來?難道是比普通類看著舒服?用著爽?還是更加便捷?還是為了強(qiáng)制讓別人用的時候必須強(qiáng)制化實(shí)現(xiàn)抽象方法省的你忘了什么的?

答:

就是為了強(qiáng)制不能實(shí)例化,以及強(qiáng)制子類必須實(shí)現(xiàn)方法這不是你忘不忘的問題,你說你不去new它就行了,這話沒錯

那你想另一個問題,為什么要有訪問控制呢?為什么要有private和public之分呢?我可以全部public,不該訪問的,我不訪問就行了???小程序里,看不出什么區(qū)別,反而private成員要寫一堆set和get函數(shù),多麻煩,我自己寫小程序的時候也會偷懶全部public,但是項(xiàng)目大了,代碼多了,這種嚴(yán)謹(jǐn)?shù)慕Y(jié)構(gòu)就很重要了。且不說會有很多人合作一起寫一個程序,哪怕還是你一個人寫,也保不住有忘記的時候,那時候編譯器不報錯,茫茫碼海上哪找錯誤去面向?qū)ο笳f到底就是方便你思考,易擴(kuò)展、易維護(hù)管理,硬要說沒必要,整個面向?qū)ο蠖紱]必要了,C語言有什么干不了的呀,運(yùn)行效率還高。

二、抽象類與接口

1、概念

接口是對動作的抽象,抽象類是對本質(zhì)的抽象。

抽象類表示的是,這個對象是什么。接口表示的是,這個對象能做什么。比如,男人和女人,他們的抽象類是人類,而貓和狗的抽象類是寵物類。人類可以吃東西,寵物類也可以吃東西,但是兩者不能混為一談,因?yàn)橛斜举|(zhì)的區(qū)別。這個“吃東西”是一個動作,你可以把“吃東西”定義成一個接口,然后讓兩個類去實(shí)現(xiàn)它的方法。

所以,在高級語言上,一個類只能繼承一個類或抽象類,正如人不可能同時是動物類又是植物類,但是可以實(shí)現(xiàn)多個接口,例如,吃飯接口、呼吸接口等。

2、使用情況

  • a.抽象類 和 接口 都是用來抽象具體對象的,但是接口的抽象級別最高;
  • b.抽象類可以有具體的方法和屬性,  接口只能有抽象方法和不可變常量(final)
  • c.抽象類主要用來抽象類別,接口主要用來抽象功能;
  • d.抽象類中不包含任何實(shí)現(xiàn),派生類必須覆蓋它們。接口中所有方法都必須是未實(shí)現(xiàn)的;
  • e.抽象類實(shí)現(xiàn)接口時,接口的方法在抽象類中可以被實(shí)現(xiàn)也可以不被實(shí)現(xiàn),而普通實(shí)現(xiàn)接口必須實(shí)現(xiàn)所有接口方法。

3、使用方向

當(dāng)你關(guān)注一個事物的本質(zhì)的時候,用抽象類;當(dāng)你關(guān)注一個操作的時候,用接口。

總結(jié)

抽象類的功能要遠(yuǎn)超過接口,但是,定義抽象類的代價高。

因?yàn)楦呒壵Z言來說(從實(shí)際設(shè)計(jì)上來說也是)每個類只能繼承一個類。

在這個類中,你必須繼承或編寫出其所有子類的所有共性。

雖然接口在功能上會弱化許多,但是它只是針對一個動作的描述。

而且你可以在一個類中同時實(shí)現(xiàn)多個接口。在設(shè)計(jì)階段會降低難度的。

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java StackTraceElement實(shí)例代碼

    Java StackTraceElement實(shí)例代碼

    這篇文章主要介紹了Java StackTraceElement實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • HotSpot的Java對象模型之Oop-Klass模型詳解

    HotSpot的Java對象模型之Oop-Klass模型詳解

    這篇文章主要介紹了HotSpot的Java對象模型之Oop-Klass模型詳解,在JVM層面,不僅Java類是對象,Java 方法也是對象, 字節(jié)碼常量池也是對象,一切皆是對象,JVM使用不同的oop-klass模型來表示各種不同的對象,需要的朋友可以參考下
    2023-08-08
  • 淺談一下數(shù)據(jù)庫連接池Druid德魯伊

    淺談一下數(shù)據(jù)庫連接池Druid德魯伊

    數(shù)據(jù)庫連接池就是一個容器持有多個數(shù)據(jù)庫連接,當(dāng)程序需要操作數(shù)據(jù)庫的時候直接從池中取出連接,使用完之后再還回去,和線程池一個道理,需要的朋友可以參考下
    2023-05-05
  • MyBatis數(shù)組與集合判斷空問題

    MyBatis數(shù)組與集合判斷空問題

    這篇文章主要介紹了MyBatis數(shù)組與集合判斷空問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Myeclipse鏈接Oracle等數(shù)據(jù)庫時lo exception: The Network Adapter could not establish the connection

    Myeclipse鏈接Oracle等數(shù)據(jù)庫時lo exception: The Network Adapter coul

    今天小編就為大家分享一篇關(guān)于Myeclipse鏈接Oracle等數(shù)據(jù)庫時lo exception: The Network Adapter could not establish the connection,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • jdk中keytool的使用以及如何提取jks文件中的公鑰和私鑰

    jdk中keytool的使用以及如何提取jks文件中的公鑰和私鑰

    JKS文件由公鑰和密鑰構(gòu)成利用Java?Keytool工具生成的文件,它是由公鑰和密鑰構(gòu)成的,下面這篇文章主要給大家介紹了關(guān)于jdk中keytool的使用以及如何提取jks文件中公鑰和私鑰的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • logback高效狀態(tài)管理器StatusManager源碼解析

    logback高效狀態(tài)管理器StatusManager源碼解析

    這篇文章主要為大家介紹了logback高效狀態(tài)管理器StatusManager源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 關(guān)于Java集合框架Collection接口詳解

    關(guān)于Java集合框架Collection接口詳解

    這篇文章主要介紹了關(guān)于Java集合框架Collection接口詳解,Collection接口是Java集合框架中的基礎(chǔ)接口,定義了一些基本的集合操作,包括添加元素、刪除元素、遍歷集合等,需要的朋友可以參考下
    2023-05-05
  • JDBC自定義連接池過程詳解

    JDBC自定義連接池過程詳解

    這篇文章主要介紹了JDBC自定義連接池過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java全面解析IO流相關(guān)知識

    Java全面解析IO流相關(guān)知識

    這篇文章主要介紹了IO流相關(guān)知識,包括File,字節(jié)流,字符流,特殊操作流(標(biāo)準(zhǔn)輸入流,標(biāo)準(zhǔn)輸出流,對象序列化與反序列化,properties與IO流結(jié)合)相關(guān)知識的總結(jié)
    2021-08-08

最新評論

加查县| 武定县| 五原县| 理塘县| 漾濞| 个旧市| 郯城县| 麻城市| 丰都县| 元江| 公主岭市| 历史| 金昌市| 西昌市| 民丰县| 保靖县| 北碚区| 甘谷县| 巴里| 江孜县| 阜平县| 小金县| 汽车| 大化| 宁武县| 峡江县| 承德市| 四川省| 化州市| 佛冈县| 牙克石市| 富源县| 简阳市| 子洲县| 宁陕县| 应城市| 大英县| 咸宁市| 仙居县| 金沙县| 花莲县|