使用abstract格式修飾抽象方法
父類中的方法,被它的子類們重寫,子類各自的實現(xiàn)都不盡相同。那么父類的方法聲明和方法主體,只有聲明還有意義,而方法主體則沒有存在的意義了(因為子類對象會調(diào)用自己重寫的方法)。換句話說,父類可能知道子類應(yīng)該有哪個功能,但是功能具體怎么實現(xiàn)父類是不清楚的(由子類自己決定),父類只需要提供一個沒有方法體的定義即可,具體實現(xiàn)交給子類自己去實現(xiàn)。我們把沒有方法體的方法稱為抽象方法。Java語法規(guī)定,包含抽象方法的類就是抽象類。
抽象方法 : 沒有方法體的方法。
抽象類:包含抽象方法的類。
抽象方法和abstract
abstract是抽象的意思,用于修飾方法方法和類,修飾的方法是抽象方法,修飾的類是抽象類。
使用abstract關(guān)鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體,具體定義格式如下:
java
修飾符 abstract 返回值類型 方法名 (參數(shù)列表);
代碼舉例:
java public abstract void run();
抽象類
如果一個類包含抽象方法,那么該類必須是抽象類。注意:抽象類不一定有抽象方法,但是有抽象方法的類必須定義成抽象類。
抽象類的定義格式如下:
java abstract class 類名字 {? }
代碼舉例:
java public abstract class Animal { public abstract void run(); }
繼承抽象類的子類必須重寫父類所有的抽象方法。否則,該子類也必須聲明為抽象類。代碼舉例:
java // 父類,抽象類 abstract class Employee { private String id; private String name; private double salary; public Employee() { } public Employee(String id, String name, double salary) { this.id = id; this.name = name; this.salary = salary; } // 抽象方法 // 抽象方法必須要放在抽象類中 abstract public void work(); } // 定義一個子類繼承抽象類 class Manager extends Employee { public Manager() { } public Manager(String id, String name, double salary) { super(id, name, salary); } // 2.重寫父類的抽象方法 @Override public void work() { System.out.println("管理其他人"); } } // 定義一個子類繼承抽象類 class Cook extends Employee { public Cook() { } public Cook(String id, String name, double salary) { super(id, name, salary); } @Override public void work() { System.out.println("廚師炒菜多加點鹽..."); } } // 測試類 public class Demo10 { public static void main(String[] args) { // 創(chuàng)建抽象類,抽象類不能創(chuàng)建對象 // 假設(shè)抽象類讓我們創(chuàng)建對象,里面的抽象方法沒有方法體,無法執(zhí)行.所以不讓我們創(chuàng)建對象 // Employee e = new Employee(); // e.work(); // 3.創(chuàng)建子類 Manager m = new Manager(); m.work(); Cook c = new Cook("ap002", "庫克", 1); c.work(); } }
此時的方法重寫,是子類對父類抽象方法的完成實現(xiàn),我們將這種方法重寫的操作,也叫做實現(xiàn)方法。
抽象類的特征
抽象類的特征總結(jié)起來可以說是有得有失
有得:抽象類得到了擁有抽象方法的能力。
有失:抽象類失去了創(chuàng)建對象的能力。
其他成員(構(gòu)造方法,實例方法,靜態(tài)方法等)抽象類都是具備的。
抽象類的細節(jié)
關(guān)于抽象類的使用,以下為語法上要注意的細節(jié),雖然條目較多,但若理解了抽象的本質(zhì),無需死記硬背。
1. 抽象類不能創(chuàng)建對象,如果創(chuàng)建,編譯無法通過而報錯。只能創(chuàng)建其非抽象子類的對象。
假設(shè)創(chuàng)建了抽象類的對象,調(diào)用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。
2. 抽象類中,可以有構(gòu)造方法,是供子類創(chuàng)建對象時,初始化父類成員使用的。
子類的構(gòu)造方法中,有默認的super(),需要訪問父類構(gòu)造方法。
3. 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
未包含抽象方法的抽象類,目的就是不想讓調(diào)用者創(chuàng)建該類對象,通常用于某些特殊的類結(jié)構(gòu)設(shè)計。
4. 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則子類也必須定義成抽象類,編譯無法通過而報錯。
假設(shè)不重寫所有抽象方法,則類中可能包含抽象方法。那么創(chuàng)建對象后,調(diào)用抽象的方法,沒有意義。
5. 抽象類存在的意義是為了被子類繼承。
抽象類中已經(jīng)實現(xiàn)的是模板中確定的成員,抽象類不確定如何實現(xiàn)的定義成抽象方法,交給具體的子類去實現(xiàn)。
抽象類存在的意義:抽象類存在的意義是為了被子類繼承,否則抽象類將毫無意義。抽象類可以強制讓子類,一定要按照規(guī)定的格式進行重寫。
到此這篇關(guān)于怎樣使用abstract格式修飾抽象方法?的文章就介紹到這了,更多相關(guān)abstract格式修飾抽象方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在SpringBoot+Freemarker中獲取項目根目錄
這篇文章主要介紹了如何在SpringBoot+Freemarker中獲取項目根目錄的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10一文教會Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)
在使用springMVC框架構(gòu)建web應(yīng)用,客戶端常會請求字符串、整型、json等格式的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于通過一文教會Java新手使用Spring?MVC中的查詢字符串和查詢參數(shù)的相關(guān)資料,需要的朋友可以參考下2024-01-01Java Swing組件復(fù)選框JCheckBox用法示例
這篇文章主要介紹了Java Swing組件復(fù)選框JCheckBox用法,結(jié)合具體實例形式分析了Swing復(fù)選框JCheckBox簡單用法與相關(guān)操作注意事項,需要的朋友可以參考下2017-11-11SpringBoot實現(xiàn)圖片識別文字的四種方式小結(jié)
本文主要介紹了SpringBoot實現(xiàn)圖片識別文字的四種方式,包括Tess4J,百度智能云,阿里云,騰訊云這四種,具有一定的參考價值,感興趣的可以了解一下2024-02-02使用Java接收和處理OpenTelemetry數(shù)據(jù)的完整指南
在現(xiàn)代分布式系統(tǒng)中,OpenTelemetry 成為了一種常見的標準,用于跟蹤和監(jiān)控應(yīng)用程序的性能和行為,OTLP是 OpenTelemetry 社區(qū)定義的一種數(shù)據(jù)傳輸協(xié)議,文將介紹如何使用 Java 編寫代碼來接收和處理 OTLP 數(shù)據(jù),需要的朋友可以參考下2024-04-04SpringBoot2零基礎(chǔ)到精通之異常處理與web原生組件注入
SpringBoot是Spring全家桶的成員之一,基于約定優(yōu)于配置的思想(即有約定默認值,在不配置的情況下會使用默認值,在配置文件下配置的話會使用配置的值)。SpringBoot是一種整合Spring技術(shù)棧的方式(或者說是框架),同時也是簡化Spring的一種快速開發(fā)的腳手架2022-03-03