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

Java中的抽象類與abstract 關(guān)鍵字使用詳解

 更新時(shí)間:2025年08月29日 11:53:42   作者:Y409001  
這篇文章主要介紹了Java中的抽象類與abstract關(guān)鍵字使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一、抽象類的概念

如果一個(gè)類不能明確地表示一個(gè)具體的對(duì)象(即沒有包含足夠的信息來描述具體的對(duì)象),那么可以將該類設(shè)計(jì)為抽象類。因?yàn)椴荒苊鞔_表示一個(gè)對(duì)象,當(dāng)然也不能實(shí)例化抽象類。

比如圖形、動(dòng)物、昆蟲等就是抽象類。本文將以圖形為例進(jìn)行講解。
圓形、三角形、矩形都是圖形,因此它們與圖形的關(guān)系是繼承關(guān)系。圖形 Shape 可以被繪制,因此可以定義一個(gè) draw() 方法,但因?yàn)?Shape 無(wú)法具體被繪制成什么形狀,因此 draw() 方法也是一個(gè)抽象方法,無(wú)法具體實(shí)現(xiàn)。

二、使用 abstract

2.1 修飾類 => 抽象類

public sbatract class Shape{ }

2.2 修飾方法 => 抽象方法,沒有具體的實(shí)現(xiàn)

public abstract void draw();

2.3 注意事項(xiàng)

(1)抽象方法和抽象類之間的關(guān)系:

抽象方法必須在抽象類中,不能在普通的類當(dāng)中。說白了就是,一個(gè)類中有抽象方法,那么這個(gè)類必須是抽象類。

抽象類不是必須包含抽象方法

(2)抽象類和普通類的區(qū)別:

兩者都是類,但是抽象類可以包含抽象方法,也可以包含普通方法和屬性,甚至構(gòu)造方法,而普通類不能包含抽象方法。

public abstract class Shape {
    public String name;
    public void create(){
    }
    public abstract void draw();
}

(3)抽象類不能直接實(shí)例化對(duì)象

(4)抽象方法不能使用 private 修飾符;

(5)抽象方法不能被 final 和 static 修飾,因?yàn)槌橄蠓椒ㄒ蛔宇愔貙懀?/p>

(6)抽象類必須被繼承,并且繼承后子類要重寫父類中的抽象方法;否則子類也是抽象類,必須要使用 abstract 修飾;

(7)抽象類中可以有構(gòu)造方法,供子類創(chuàng)建對(duì)象時(shí),初始化父類的成員變量。

三、抽象類的作用

抽象類本身不能被實(shí)例化,要想使用,只能創(chuàng)建該抽象類的子類,然后讓子類重寫抽象類中的抽象方法。

?既然那么麻煩,為什么不直接用普通類呢?

因?yàn)?抽象類比普通類多了一層編譯器自動(dòng)檢驗(yàn)機(jī)制:
如果抽象類中包含了抽象方法,另一個(gè)普通類繼承了這個(gè)抽象類,那么編譯器會(huì)自動(dòng)檢測(cè)該普通類中是否有抽象方法的重寫。

public class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("畫一個(gè)圓形。");
    }
}

但抽象類不能實(shí)例化,那抽象類的作用是什么?

抽象類的存在就是為了被繼承的,其定義的成員變量和方法可以給子類使用。即,也可以向上轉(zhuǎn)型、發(fā)生動(dòng)態(tài)綁定。

public class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("畫一朵花。");
    }
}

使用方法1:Shape 抽象類類型的數(shù)組,與普通類使用方法一致

public class Test {
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        Flower flower = new Flower();
        Shape[] shapes = {cycle,flower,cycle,flower};
        for (Shape s : shapes){
            s.draw();
        }
    }
}

使用方法2:向上轉(zhuǎn)型 

public class Test {
    public static void main(String[] args) {
        //Shape shape = new Shape(); // 不行
        Shape shape = new Cycle(); // 可以,向上轉(zhuǎn)型
    }
}

四、多層繼承抽象類

如果抽象類涉及多層繼承,在普通類中有多少抽象方法就得重寫多少個(gè)。

public abstract class Shape {
    public abstract void draw();
}
abstract class SolidShape extends Shape{ // 立體圖形
    abstract void test();
}
class Cylinder extends SolidShape{  // 柱體
    @Override
    void test() {
    }
    @Override
    public void draw() {
    }
}

五、匿名對(duì)象

一般實(shí)例化對(duì)象的語(yǔ)句都是形如 Dog dog = new Dog(); ,如果去掉等號(hào)左邊,得到的 new Dog() 就是匿名對(duì)象。 

public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        drawMap(new Cycle()); // 傳的參數(shù)是匿名對(duì)象
        drawMap(new Flower());
    }
}

匿名對(duì)象的缺點(diǎn)是只能使用一次,

public class Test {
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        Cycle cycle = new Cycle();
        drawMap(cycle);
        drawMap(cycle); // 只用實(shí)例化一個(gè)對(duì)象,傳的是同一個(gè)對(duì)象
        cycle.draw();
        cycle.draw();
        // ======采用匿名對(duì)象======
        drawMap(new Cycle()); // 傳的參數(shù)是匿名對(duì)象
        drawMap(new Cycle()); // 實(shí)例化了兩個(gè)對(duì)象
        new Cycle().draw();
        new Cycle().draw();
    }
}

如果不采用匿名對(duì)象,則實(shí)例化一次的對(duì)象 cycle ,可以被多次傳參。

到此這篇關(guān)于Java中的抽象類與abstract 關(guān)鍵字使用詳解的文章就介紹到這了,更多相關(guān)java抽象類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談JavaAPI 中 <E> 與 <T> 的含義

    淺談JavaAPI 中 <E> 與 <T> 的含義

    下面小編就為大家?guī)硪黄獪\談JavaAPI 中 <E> 與 <T> 的含義。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Aspectj與Spring AOP的對(duì)比分析

    Aspectj與Spring AOP的對(duì)比分析

    這篇文章主要介紹了Aspectj與Spring AOP的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼

    java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼

    本文主要介紹了java實(shí)現(xiàn)文件分片上傳并且斷點(diǎn)續(xù)傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • spring?boot項(xiàng)目實(shí)戰(zhàn)之實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接

    spring?boot項(xiàng)目實(shí)戰(zhàn)之實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接

    在我們?nèi)粘5拈_發(fā)過程中,肯定不可避免的會(huì)使用到數(shù)據(jù)庫(kù)以及SQL?語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于spring?boot項(xiàng)目實(shí)戰(zhàn)之實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • springboot封裝JsonUtil,CookieUtil工具類代碼實(shí)例

    springboot封裝JsonUtil,CookieUtil工具類代碼實(shí)例

    這篇文章主要介紹了springboot封裝JsonUtil,CookieUtil工具類過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 使用Spring Boot上傳文件功能

    使用Spring Boot上傳文件功能

    上傳文件是互聯(lián)網(wǎng)中常應(yīng)用的場(chǎng)景之一,最典型的情況就是上傳頭像等,今天就帶著大家做一個(gè)Spring Boot上傳文件的小案例,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-01-01
  • maven的安裝配置以及在IDEA中的配置圖文教程

    maven的安裝配置以及在IDEA中的配置圖文教程

    下面小編就為大家分享一篇maven的安裝配置以及在IDEA中的配置圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java應(yīng)用打包成Docker鏡像

    Java應(yīng)用打包成Docker鏡像

    這篇文章主要為大家介紹了Java應(yīng)用打包成Docker鏡像的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 詳解Java高階語(yǔ)法Volatile

    詳解Java高階語(yǔ)法Volatile

    這篇文章主要介紹了Java高階語(yǔ)法Volatile,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot底層注解詳解

    SpringBoot底層注解詳解

    這篇文章主要介紹了SpringBoot底層注解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

玛纳斯县| 云林县| 遵化市| 大足县| 新河县| 昭苏县| 巴中市| 东平县| 安阳市| 公主岭市| 仁化县| 稻城县| 博爱县| 新沂市| 西贡区| 延津县| 哈巴河县| 海兴县| 和平区| 贡山| 肇庆市| 安平县| 札达县| 兴隆县| 平阴县| 泸水县| 洪雅县| 伊春市| 沂源县| 枣阳市| 桦甸市| 乐昌市| 枣阳市| 邻水| 融水| 南京市| 阳山县| 化隆| 玉龙| 依兰县| 兰溪市|