1. 抽象類的概述
當(dāng)我們在做子類共性功能抽取時,有些方法在父類中并沒有具體的體現(xiàn),這個時候就需要抽象類了!
在Java中,一個沒有方法體的方法應(yīng)該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽
象類!
2. 抽象類的特點(diǎn)
- 抽象類和抽象方法必須使用 abstract 關(guān)鍵字修飾
//抽象類的定義
public abstract class 類名 {}
//抽象方法的定義
public abstract void eat();
- 抽象類中不一定有抽象方法,有抽象方法的類一定是抽象類
- 抽象類不能實(shí)例化
- 抽象類可以有構(gòu)造方法
- 抽象類的子類
- 要么重寫抽象類中的所有抽象方法
- 要么是抽象類
3. 抽象類的實(shí)用價值
封裝共性功能:抽象類可以封裝多個子類共同擁有的功能,避免各自獨(dú)立實(shí)現(xiàn)重復(fù)的代碼。通過將共性行為定義在抽象類中,具體子類只需要實(shí)現(xiàn)自己的特殊邏輯即可,可以大大提高代碼的復(fù)用性。
規(guī)范行為:抽象類通過定義抽象方法,規(guī)范了子類的行為,強(qiáng)制子類必須實(shí)現(xiàn)相關(guān)方法,從而避免了因漏實(shí)現(xiàn)或?qū)崿F(xiàn)不當(dāng)帶來的問題;同時也增加了代碼的易讀性、易維護(hù)性。
反向控制:抽象類能夠?yàn)樽宇愄峁┗拘袨榭蚣?,在子類中調(diào)用父類定義的具體方法和屬性,以完成基本功能。子類通過繼承與擴(kuò)展的方式實(shí)現(xiàn)自己的特殊邏輯,這種反向控制能夠在大型工程中有效地管理代碼結(jié)構(gòu)和維護(hù)。
技術(shù)支持:在框架設(shè)計、系統(tǒng)維護(hù)以及代碼重構(gòu)等過程中,抽象類可以提供技術(shù)支持和規(guī)范,將大型工程的不同部分組合起來形成協(xié)調(diào)有序的整體,并且能夠保證不同部分之間的解耦和相互獨(dú)立性。
4. 抽象類的案例
案例需求
定義貓類(Cat)和狗類(Dog)
貓類成員方法:eat(貓吃魚)drink(喝水…)
實(shí)現(xiàn)步驟
- 貓類和狗類中存在共性內(nèi)容,應(yīng)向上抽取出一個動物類(Animal)
- 父類Animal中,無法將 eat 方法具體實(shí)現(xiàn)描述清楚,所以定義為抽象方法
- 抽象方法需要存活在抽象類中,將Animal定義為抽象類
- 讓 Cat 和 Dog 分別繼承 Animal,重寫eat方法
- 測試類中創(chuàng)建 Cat 和 Dog 對象,調(diào)用方法測試
代碼實(shí)現(xiàn)
動物類
public abstract class Animal {
public void drink(){
System.out.println("喝水");
}
public Animal(){
}
public abstract void eat();
}
貓類
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("貓吃魚");
}
}
狗類
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
測試類文章來源:http://www.zghlxwxcb.cn/news/detail-468690.html
public static void main(String[] args) {
Dog d = new Dog();
d.eat();
d.drink();
Cat c = new Cat();
c.drink();
c.eat();
//Animal a = new Animal();
//a.eat();
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-468690.html
到了這里,關(guān)于【JavaSE】Java基礎(chǔ)語法(十六):抽象類的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!