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

Java抽象的本質(zhì)解析

 更新時(shí)間:2022年03月01日 17:05:06   作者:最愛吃魚罐頭  
對(duì)于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一,在 Java 中可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)抽象的相關(guān)資料,需要的朋友可以參考下

茫茫人海千千萬萬,感謝這一秒你看到這里。希望我的能對(duì)你的有所幫助!共勉!

愿你在未來的日子,保持熱愛,奔赴山海!

Java抽象基礎(chǔ)知識(shí)

?? 抽象

抽象是從眾多的事物中抽取出共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征的過程。具體地說,抽象就是人們在實(shí)踐的基礎(chǔ)上,對(duì)于豐富的感性材料通過去粗取精、去偽存真、由此及彼、由表及里的加工制作,形成概念、判斷、推理等思維形式,以反映事物的本質(zhì)和規(guī)律的方法。

?? 抽象的定義

在繼承過程中,我們知道父類的方法可以子類進(jìn)行重寫,而每個(gè)子類各自的實(shí)現(xiàn)都不盡相同。就好比動(dòng)物都有吃的方法行為吧,而每個(gè)動(dòng)物的子類對(duì)于吃的東西都可能不是相同滴,可是這導(dǎo)致了什么呢?

我們定義父類的方法主體是不是就沒有任何意義了,因?yàn)樵谧宇愓{(diào)用方法過程中,是調(diào)用了自己重寫的方法,而不是父類的方法。

也就是說,父類聲明了方法,子類去各自實(shí)現(xiàn)該方法即可。代表著父類可以不知道具體實(shí)現(xiàn)是什么,但是清楚的有什么方法是需要的。所以方法父類完全只需要提供一個(gè)沒有方法體的方法簽名即可,具體實(shí)現(xiàn)交給子類自己去實(shí)現(xiàn)。

而我們對(duì)于這種沒有方法體的方法稱為抽象方法。在Java語法規(guī)定,包含抽象方法的類就是抽象類。

  • 抽象方法 : 沒有方法體的方法。
  • 抽象類:包含抽象方法的類。

定義抽象的關(guān)鍵字:abstract,接下來看看如何使用吧!

??abstract的使用

abstract是抽象的意思,用于修飾方法方法和類,修飾的方法是抽象方法,修飾的類是抽象類。

抽象方法:

使用abstract 關(guān)鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個(gè)方法名,而沒有方法體。

定義格式:

權(quán)限修飾符 abstract 返回值類型 方法名 (參數(shù)列表);

代碼如下:

public abstract void eat();

抽象類:

如果一個(gè)類包含抽象方法,那么該類必須是抽象類。

注意:抽象類不一定有抽象方法,但是有抽象方法的類必須定義成抽象類。

定義格式:

abstract class 類名字 {

}

代碼如下:

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

?? 定義抽象類

我們將之前的動(dòng)物類改造成抽象類,然后吃的方法也改造成抽象方法。

注意:一旦定義為抽象類后,子類繼承父類時(shí),是必須重寫里面的抽象方法。

定義抽象父類:

package com.na.pojo;

/**
 * 先定義一個(gè)抽象父類 --> 動(dòng)物類
 * 動(dòng)物都有一個(gè)吃的抽象方法
 */
public abstract class Animal {

    // 定義為抽象方法后,無需去做方法實(shí)體的實(shí)現(xiàn)!
    public abstract void eat();
}

定義子類:

貓咪:

package com.na.pojo;

/**
 * 定義貓類繼承抽象動(dòng)物類,
 * 隨之重寫里面的吃行為,因?yàn)樨堃灿谐缘男袨?,但是貓喜歡吃罐頭
 */
public class Cat extends Animal{

    // 抽象類的方法必須重寫,不然編譯會(huì)不通過。
    public void eat() {
        System.out.println("小喵咪都喜歡吃魚罐頭!");
    }

    /**
     * 增加一哥貓咪特有的玩球方法()
     */
    public void playBall() {
        System.out.println("小喵咪都喜歡小球!");
    }
}

小狗:

package com.na.pojo;

/**
 * 定義狗類繼承抽象動(dòng)物類,
 * 隨之重寫里面的吃行為,因?yàn)楣芬灿谐缘男袨?,但是狗喜歡啃骨頭
 */
public class Dog extends Animal{

    // 抽象類的方法必須重寫,不然編譯會(huì)不通過。
    public void eat() {
        System.out.println("小狗狗都愛啃骨頭!");
    }

    public void walk() {
        System.out.println("小狗在被我溜著!");
    }
}

定義測試類:

package com.na;

import com.na.pojo.Animal;
import com.na.pojo.Cat;
import com.na.pojo.Dog;

public class Demo {
    public static void main(String[] args) {
        // 創(chuàng)建抽象類,抽象類不能創(chuàng)建對(duì)象
//		Animal animal = new Animal();
//        animal.eat();

        // 創(chuàng)建小貓咪
        Cat cat = new Cat();
        cat.eat();
        cat.playBall();

        Dog dog = new Dog();
        dog.eat();
        dog.walk();
    }
}

得到結(jié)果:

小喵咪都喜歡吃魚罐頭!
小喵咪都喜歡小球!
小狗狗都愛啃骨頭!
小狗在被我溜著!

類的大致結(jié)構(gòu):

注意:假設(shè)抽象類可以創(chuàng)建對(duì)象,但是呢,里面的抽象方法是沒有方法體給我們?nèi)?shí)現(xiàn),從而程序也是無法執(zhí)行,所以不讓我們創(chuàng)建對(duì)象。

?? 抽象類的一些注意點(diǎn)

對(duì)于抽象類的使用,以下為抽象類的使用上要注意的細(xì)節(jié):

1.抽象類不能創(chuàng)建對(duì)象,如果創(chuàng)建,編譯無法通過而報(bào)錯(cuò)。只能創(chuàng)建其非抽象子類的對(duì)象。

假設(shè)創(chuàng)建了抽象類的對(duì)象,調(diào)用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。

2.抽象類中,可以有構(gòu)造器,是供子類創(chuàng)建對(duì)象時(shí),初始化父類成員使用的。

子類的構(gòu)造方法中,有默認(rèn)的super(),需要訪問父類構(gòu)造方法。

package com.na.pojo;

/**
 * 先定義一個(gè)抽象父類 --> 動(dòng)物類
 * 動(dòng)物都有一個(gè)吃的抽象方法
 */
public abstract class Animal {

    private String name;
    private int age;

    // 可以有構(gòu)造器
    public Animal(){

    }

    // 甚至可以有參構(gòu)造器
    public Animal(String name, int age){
        this.name = name;
        this.age = age;
    }

    // 定義為抽象方法后,無需去做方法實(shí)體的實(shí)現(xiàn)!
    public abstract void eat();
}

3.抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

未包含抽象方法的抽象類,目的就是不想讓調(diào)用者創(chuàng)建該類對(duì)象,通常用于某些特殊的類結(jié)構(gòu)設(shè)計(jì)。

4.抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則子類也必須定義成抽象類,編譯無法通過而報(bào)錯(cuò)。

如果子類不重寫所有抽象方法,則類中可能會(huì)包含抽象方法。那么在創(chuàng)建對(duì)象后,調(diào)用抽象的方法,沒有意義。

5.抽象類存在的意義是為了被子類繼承,抽象類體現(xiàn)的是模板思想。

抽象類中已經(jīng)實(shí)現(xiàn)的是模板中確定的成員,抽象類不確定如何實(shí)現(xiàn)的定義成抽象方法,交給具體的子類去實(shí)現(xiàn)。

??總結(jié)

相信各位看官都對(duì)Java中的特性之一抽象的知識(shí)和使用有了一定了解,等待下一次更多Java基礎(chǔ)的學(xué)習(xí)吧!

讓我們也一起加油吧!本人不才,如有什么缺漏、錯(cuò)誤的地方,也歡迎各位人才大佬評(píng)論中批評(píng)指正!

學(xué)到這里,今天的世界打烊了,晚安!雖然這篇文章完結(jié)了,但是我還在,永不完結(jié)。我會(huì)努力保持寫文章。來日方長,何懼車遙馬慢!

感謝各位看到這里!愿你韶華不負(fù),青春無悔!

到此這篇關(guān)于Java抽象的本質(zhì)解析的文章就介紹到這了,更多相關(guān)Java 抽象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 手把手帶你掌握SpringBoot RabbitMQ延遲隊(duì)列

    手把手帶你掌握SpringBoot RabbitMQ延遲隊(duì)列

    RabbitMQ 是一個(gè)由Erlang語言開發(fā)的AMQP的開源實(shí)現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊(duì)列
    2021-09-09
  • Spring Security整合KeyCloak保護(hù)Rest API實(shí)現(xiàn)詳解

    Spring Security整合KeyCloak保護(hù)Rest API實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Spring Security整合KeyCloak保護(hù)Rest API實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解SpringBoot緩存的實(shí)例代碼(EhCache 2.x 篇)

    詳解SpringBoot緩存的實(shí)例代碼(EhCache 2.x 篇)

    這篇文章主要介紹了詳解SpringBoot緩存的實(shí)例代碼(EhCache 2.x 篇),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java解壓rar文件的兩種實(shí)現(xiàn)方法

    Java解壓rar文件的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了Java解壓rar文件的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Struts 2 配置Action詳解

    Struts 2 配置Action詳解

    本篇文章主要介紹了Struts 2 配置Action詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 帶你了解Java常用類小結(jié)

    帶你了解Java常用類小結(jié)

    今天帶大家學(xué)習(xí)Java常用工具類,文中有非常詳細(xì)的圖文解說及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • SpringBoot集成Quartz實(shí)現(xiàn)定時(shí)任務(wù)的方法

    SpringBoot集成Quartz實(shí)現(xiàn)定時(shí)任務(wù)的方法

    Quartz是一個(gè)定時(shí)任務(wù)框架,其他介紹網(wǎng)上也很詳盡。這里要介紹一下Quartz里的幾個(gè)非常核心的接口。通過實(shí)例代碼給大家講解SpringBoot集成Quartz實(shí)現(xiàn)定時(shí)任務(wù)的方法,感興趣的朋友一起看看吧
    2020-05-05
  • java中List對(duì)象排序通用方法

    java中List對(duì)象排序通用方法

    這篇文章主要介紹了java中List對(duì)象排序通用方法,涉及java針對(duì)List對(duì)象的操作技巧,需要的朋友可以參考下
    2015-05-05
  • Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    Java項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式

    這篇文章主要介紹了項(xiàng)目打包發(fā)布到maven私倉常見的幾種方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • SpringBoot接口數(shù)據(jù)如何實(shí)現(xiàn)優(yōu)雅的脫敏問題

    SpringBoot接口數(shù)據(jù)如何實(shí)現(xiàn)優(yōu)雅的脫敏問題

    這篇文章主要介紹了SpringBoot接口數(shù)據(jù)如何實(shí)現(xiàn)優(yōu)雅的脫敏問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

晋江市| 吴桥县| 延寿县| 江油市| 定边县| 汝阳县| 红河县| 正定县| 太白县| 白银市| 新宾| 石柱| 会泽县| 兴业县| 木兰县| 安岳县| 哈尔滨市| 麻栗坡县| 海口市| 泗洪县| 白朗县| 韶山市| 曲阳县| 樟树市| 柏乡县| 襄城县| 丹东市| 栖霞市| 合水县| 图们市| 武隆县| 青海省| 黎川县| 长沙市| 夹江县| 红桥区| 西乌珠穆沁旗| 珠海市| 萨迦县| 察雅县| 乌兰县|