java關(guān)鍵字abstract(抽象)實(shí)例詳解
抽象類與抽象方法概述
舉例1:
隨著繼承層次中一個(gè)個(gè)新子類的定義,類變得越來(lái)越具體,而父類則更一般,更通用。類的設(shè)計(jì)應(yīng)該保證父類和子類能夠共享特征。有時(shí)將一個(gè)父類設(shè)計(jì)得非常抽象,以至于它沒(méi)有具體的實(shí)例,這樣的類叫做抽象類。

舉例2:
我們聲明一些幾何圖形類:圓、矩形、三角形類等,發(fā)現(xiàn)這些類都有共同特征:求面積、求周長(zhǎng)。那么這些共同特征應(yīng)該抽取到一個(gè)共同父類:幾何圖形類中。但是這些方法在父類中又無(wú)法給出具體的實(shí)現(xiàn),而是應(yīng)該交給子類各自具體實(shí)現(xiàn)。那么父類在聲明這些方法時(shí),就只有方法簽名,沒(méi)有方法體,我們把沒(méi)有方法體的方法稱為抽象方法。Java語(yǔ)法規(guī)定,包含抽象方法的類必須是抽象類。
語(yǔ)法格式
- 抽象類:被abstract修飾的類。
- 抽象方法:被abstract修飾沒(méi)有方法體的方法。
抽象類的語(yǔ)法格式
[權(quán)限修飾符] abstract class 類名{
}
[權(quán)限修飾符] abstract class 類名 extends 父類{
}抽象方法的語(yǔ)法格式
[其他修飾符] abstract 返回值類型 方法名([形參列表]);
注意:抽象方法沒(méi)有方法體

代碼舉例:
public abstract class Animal {
public abstract void eat();
}public class Cat extends Animal {
public void eat (){
System.out.println("小貓吃魚和貓糧");
}
}public class CatTest {
public static void main(String[] args) {
// 創(chuàng)建子類對(duì)象
Cat c = new Cat();
// 調(diào)用eat方法
c.eat();
}
}此時(shí)的方法重寫,是子類對(duì)父類抽象方法的完成實(shí)現(xiàn),我們將這種方法重寫的操作,也叫做實(shí)現(xiàn)方法。
使用說(shuō)明
1. 抽象類不能創(chuàng)建對(duì)象,如果創(chuàng)建,編譯無(wú)法通過(guò)而報(bào)錯(cuò)。只能創(chuàng)建其非抽象子類的對(duì)象。
理解:假設(shè)創(chuàng)建了抽象類的對(duì)象,調(diào)用抽象的方法,而抽象方法沒(méi)有具體的方法體,沒(méi)有意義。
抽象類是用來(lái)被繼承的,抽象類的子類必須重寫父類的抽象方法,并提供方法體。若沒(méi)有重寫全部的抽象方法,仍為抽象類。
2. 抽象類中,也有構(gòu)造方法,是供子類創(chuàng)建對(duì)象時(shí),初始化父類成員變量使用的。
理解:子類的構(gòu)造方法中,有默認(rèn)的super()或手動(dòng)的super(實(shí)參列表),需要訪問(wèn)父類構(gòu)造方法。
3. 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
理解:未包含抽象方法的抽象類,目的就是不想讓調(diào)用者創(chuàng)建該類對(duì)象,通常用于某些特殊的類結(jié)構(gòu)設(shè)計(jì)。
4. 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則,編譯無(wú)法通過(guò)而報(bào)錯(cuò)。除非該子類也是抽象類。
理解:假設(shè)不重寫所有抽象方法,則類中可能包含抽象方法。那么創(chuàng)建對(duì)象后,調(diào)用抽象的方法,沒(méi)有意義。
注意事項(xiàng)
- 不能用abstract修飾變量、代碼塊、構(gòu)造器;
- 不能用abstract修飾私有方法、靜態(tài)方法、final的方法、final的類。
到此這篇關(guān)于java關(guān)鍵字abstract(抽象)詳解的文章就介紹到這了,更多相關(guān)java關(guān)鍵字abstract內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringSecurity?表單登錄的實(shí)現(xiàn)
本文主要介紹了SpringSecurity?表單登錄的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
java實(shí)現(xiàn)上傳文件到服務(wù)器和客戶端
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)上傳文件到服務(wù)器和客戶端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
springboot 自定義配置Boolean屬性不生效的解決
這篇文章主要介紹了springboot 自定義配置Boolean屬性不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java多線程之Callable接口的實(shí)現(xiàn)
這篇文章主要介紹了Java多線程之Callable接口的實(shí)現(xiàn),Callable和Runnbale一樣代表著任務(wù),區(qū)別在于Callable有返回值并且可以拋出異常。感興趣的小伙伴們可以參考一下2018-08-08
關(guān)于Java中攔截mybatis并輸出完整sql語(yǔ)句的方法
這篇文章主要介紹了關(guān)于Java中攔截mybatis并輸出完整sql語(yǔ)句的方法,假如項(xiàng)目中有很多很多的SQL我們不可能一一的去修改解決。這個(gè)時(shí)候我們就需要通過(guò)mybatis攔截SQL并且最終修改SQL,需要的朋友可以參考下2023-08-08
SpringBoot+mail 輕松實(shí)現(xiàn)各類郵件自動(dòng)推送
在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常需要用到郵件通知功能,例如,通過(guò)郵箱注冊(cè),郵箱找回密碼,郵箱推送報(bào)表等等,實(shí)際的應(yīng)用場(chǎng)景非常的多,今天通過(guò)這篇文章,我們一起來(lái)學(xué)習(xí)如何在 Spring Boot 中快速實(shí)現(xiàn)一個(gè)自動(dòng)發(fā)送郵件的功能2024-07-07

