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

java之抽象類(lèi)和繼承抽象類(lèi)解讀

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

抽象類(lèi)和繼承抽象類(lèi)

抽象類(lèi)不能直接實(shí)例化,需要?jiǎng)?chuàng)建一個(gè)指向自己的對(duì)象引用(其子類(lèi))來(lái)實(shí)例化

代碼:

public class Main
{
    public static void main(String[] args)
    {
        /* People people = new People(); */ //錯(cuò)誤
        People p = new Man();
        p.eat();
        p.drink();
        /* p.palyGames() */ //此方法錯(cuò)誤
        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("人都會(huì)吃飯");
        }
        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類(lèi)n抽象方法和成果調(diào)用了其抽象方法,則訪問(wèn)的是其引用類(lèi)(子類(lèi))

繼承的抽象類(lèi);

如果是Man man= new Man();

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


這里寫(xiě)圖片描述

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

概念:

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

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

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

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

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

一、抽象類(lèi)與普通類(lèi)

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

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

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

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

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

問(wèn):

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

答:

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

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

二、抽象類(lèi)與接口

1、概念

接口是對(duì)動(dòng)作的抽象,抽象類(lèi)是對(duì)本質(zhì)的抽象。

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

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

2、使用情況

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

3、使用方向

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

總結(jié)

抽象類(lèi)的功能要遠(yuǎn)超過(guò)接口,但是,定義抽象類(lèi)的代價(jià)高。

因?yàn)楦呒?jí)語(yǔ)言來(lái)說(shuō)(從實(shí)際設(shè)計(jì)上來(lái)說(shuō)也是)每個(gè)類(lèi)只能繼承一個(gè)類(lèi)。

在這個(gè)類(lèi)中,你必須繼承或編寫(xiě)出其所有子類(lèi)的所有共性。

雖然接口在功能上會(huì)弱化許多,但是它只是針對(duì)一個(gè)動(dòng)作的描述。

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

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

相關(guān)文章

  • Java函數(shù)式編程(十一):遍歷目錄

    Java函數(shù)式編程(十一):遍歷目錄

    這篇文章主要介紹了Java函數(shù)式編程(十一):遍歷目錄,本文是系列文章的第11篇,其它文章請(qǐng)參閱本文底部的相關(guān)文章,需要的朋友可以參考下
    2014-09-09
  • Java Char的簡(jiǎn)單工具類(lèi)CharUtil分享

    Java Char的簡(jiǎn)單工具類(lèi)CharUtil分享

    下面小編就為大家分享一篇Java Char的簡(jiǎn)單工具類(lèi)CharUtil,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • pageHelper一對(duì)多分頁(yè)解決方案示例

    pageHelper一對(duì)多分頁(yè)解決方案示例

    這篇文章主要為大家介紹了pageHelper一對(duì)多分頁(yè)解決方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 一篇文章帶你搞懂Java線程池實(shí)現(xiàn)原理

    一篇文章帶你搞懂Java線程池實(shí)現(xiàn)原理

    線程池?zé)o論是工作還是面試都是必備的技能,但是很多人對(duì)于線程池的實(shí)現(xiàn)原理卻一知半解,并不了解線程池內(nèi)部的工作原理,今天就帶大家一塊剖析線程池底層實(shí)現(xiàn)原理
    2022-11-11
  • SpringBoot整合Canal與RabbitMQ監(jiān)聽(tīng)數(shù)據(jù)變更記錄

    SpringBoot整合Canal與RabbitMQ監(jiān)聽(tīng)數(shù)據(jù)變更記錄

    這篇文章主要介紹了SpringBoot整合Canal與RabbitMQ監(jiān)聽(tīng)數(shù)據(jù)變更記錄,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 10分鐘在服務(wù)器部署好Jenkins的詳細(xì)過(guò)程

    10分鐘在服務(wù)器部署好Jenkins的詳細(xì)過(guò)程

    這篇文章主要介紹了10分鐘在服務(wù)器部署好Jenkins,本文主要是?Jenkins?的安裝部署,那前提我們應(yīng)該裝好?Git?Maven?JDK,準(zhǔn)備工作本文不給大家詳細(xì)介紹了,對(duì)服務(wù)器部署Jenkins相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-08-08
  • mac下idea的svn密碼記不住的問(wèn)題及處理方法

    mac下idea的svn密碼記不住的問(wèn)題及處理方法

    這篇文章主要介紹了mac下idea的svn密碼記不住的問(wèn)題及處理方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 基于Process#waitFor()阻塞問(wèn)題的解決

    基于Process#waitFor()阻塞問(wèn)題的解決

    這篇文章主要介紹了Process#waitFor()阻塞問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 帶你了解Java Maven的打包操作

    帶你了解Java Maven的打包操作

    這篇文章主要介紹了Maven打包的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java開(kāi)發(fā)環(huán)境不再需要配置classpath問(wèn)題

    Java開(kāi)發(fā)環(huán)境不再需要配置classpath問(wèn)題

    這篇文章主要介紹了Java開(kāi)發(fā)環(huán)境不再需要配置classpath問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論