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

Java中的抽象類與abstract 關鍵字使用詳解

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

一、抽象類的概念

如果一個類不能明確地表示一個具體的對象(即沒有包含足夠的信息來描述具體的對象),那么可以將該類設計為抽象類。因為不能明確表示一個對象,當然也不能實例化抽象類。

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

二、使用 abstract

2.1 修飾類 => 抽象類

public sbatract class Shape{ }

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

public abstract void draw();

2.3 注意事項

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

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

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

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

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

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

(3)抽象類不能直接實例化對象

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

(5)抽象方法不能被 final 和 static 修飾,因為抽象方法要被子類重寫;

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

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

三、抽象類的作用

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

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

因為 抽象類比普通類多了一層編譯器自動檢驗機制:
如果抽象類中包含了抽象方法,另一個普通類繼承了這個抽象類,那么編譯器會自動檢測該普通類中是否有抽象方法的重寫。

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

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

抽象類的存在就是為了被繼承的,其定義的成員變量和方法可以給子類使用。即,也可以向上轉(zhuǎn)型、發(fā)生動態(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)型
    }
}

四、多層繼承抽象類

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

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() {
    }
}

五、匿名對象

一般實例化對象的語句都是形如 Dog dog = new Dog(); ,如果去掉等號左邊,得到的 new Dog() 就是匿名對象。 

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

匿名對象的缺點是只能使用一次,

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); // 只用實例化一個對象,傳的是同一個對象
        cycle.draw();
        cycle.draw();
        // ======采用匿名對象======
        drawMap(new Cycle()); // 傳的參數(shù)是匿名對象
        drawMap(new Cycle()); // 實例化了兩個對象
        new Cycle().draw();
        new Cycle().draw();
    }
}

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

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

相關文章

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

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

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

    Aspectj與Spring AOP的對比分析

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

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

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

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

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

    springboot封裝JsonUtil,CookieUtil工具類代碼實例

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

    使用Spring Boot上傳文件功能

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

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

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

    Java應用打包成Docker鏡像

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

    詳解Java高階語法Volatile

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

    SpringBoot底層注解詳解

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

最新評論

西宁市| 奈曼旗| 德惠市| 朝阳区| 梁山县| 阳泉市| 高雄县| 牟定县| 日土县| 安泽县| 右玉县| 东山县| 互助| 错那县| 高雄县| 惠水县| 长武县| 宣威市| 惠安县| 红河县| 红河县| 萍乡市| 刚察县| 富锦市| 太康县| 沙雅县| 万安县| 许昌市| 湛江市| 泸水县| 通城县| 绿春县| 都江堰市| 突泉县| 温州市| 柳河县| 莱州市| 渝中区| 海安县| 毕节市| 西平县|