Java抽象的本質(zhì)解析
茫茫人海千千萬萬,感謝這一秒你看到這里。希望我的能對你的有所幫助!共勉!
愿你在未來的日子,保持熱愛,奔赴山海!
Java抽象基礎知識
?? 抽象
抽象是從眾多的事物中抽取出共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征的過程。具體地說,抽象就是人們在實踐的基礎上,對于豐富的感性材料通過去粗取精、去偽存真、由此及彼、由表及里的加工制作,形成概念、判斷、推理等思維形式,以反映事物的本質(zhì)和規(guī)律的方法。
?? 抽象的定義
在繼承過程中,我們知道父類的方法可以子類進行重寫,而每個子類各自的實現(xiàn)都不盡相同。就好比動物都有吃的方法行為吧,而每個動物的子類對于吃的東西都可能不是相同滴,可是這導致了什么呢?
我們定義父類的方法主體是不是就沒有任何意義了,因為在子類調(diào)用方法過程中,是調(diào)用了自己重寫的方法,而不是父類的方法。
也就是說,父類聲明了方法,子類去各自實現(xiàn)該方法即可。代表著父類可以不知道具體實現(xiàn)是什么,但是清楚的有什么方法是需要的。所以方法父類完全只需要提供一個沒有方法體的方法簽名即可,具體實現(xiàn)交給子類自己去實現(xiàn)。
而我們對于這種沒有方法體的方法稱為抽象方法。在Java語法規(guī)定,包含抽象方法的類就是抽象類。
- 抽象方法 : 沒有方法體的方法。
- 抽象類:包含抽象方法的類。
定義抽象的關鍵字:abstract,接下來看看如何使用吧!
??abstract的使用
abstract是抽象的意思,用于修飾方法方法和類,修飾的方法是抽象方法,修飾的類是抽象類。
抽象方法:
使用abstract 關鍵字修飾方法,該方法就成了抽象方法,抽象方法只包含一個方法名,而沒有方法體。
定義格式:
權限修飾符 abstract 返回值類型 方法名 (參數(shù)列表);
代碼如下:
public abstract void eat();
抽象類:
如果一個類包含抽象方法,那么該類必須是抽象類。
注意:抽象類不一定有抽象方法,但是有抽象方法的類必須定義成抽象類。
定義格式:
abstract class 類名字 {
}
代碼如下:
public abstract class Animal {
public abstract void eat();
}
?? 定義抽象類
我們將之前的動物類改造成抽象類,然后吃的方法也改造成抽象方法。
注意:一旦定義為抽象類后,子類繼承父類時,是必須重寫里面的抽象方法。
定義抽象父類:
package com.na.pojo;
/**
* 先定義一個抽象父類 --> 動物類
* 動物都有一個吃的抽象方法
*/
public abstract class Animal {
// 定義為抽象方法后,無需去做方法實體的實現(xiàn)!
public abstract void eat();
}
定義子類:
貓咪:
package com.na.pojo;
/**
* 定義貓類繼承抽象動物類,
* 隨之重寫里面的吃行為,因為貓也有吃的行為,但是貓喜歡吃罐頭
*/
public class Cat extends Animal{
// 抽象類的方法必須重寫,不然編譯會不通過。
public void eat() {
System.out.println("小喵咪都喜歡吃魚罐頭!");
}
/**
* 增加一哥貓咪特有的玩球方法()
*/
public void playBall() {
System.out.println("小喵咪都喜歡小球!");
}
}
小狗:
package com.na.pojo;
/**
* 定義狗類繼承抽象動物類,
* 隨之重寫里面的吃行為,因為狗也有吃的行為,但是狗喜歡啃骨頭
*/
public class Dog extends Animal{
// 抽象類的方法必須重寫,不然編譯會不通過。
public void eat() {
System.out.println("小狗狗都愛啃骨頭!");
}
public void walk() {
System.out.println("小狗在被我溜著!");
}
}
定義測試類:
package com.na;
import com.na.pojo.Animal;
import com.na.pojo.Cat;
import com.na.pojo.Dog;
public class Demo {
public static void main(String[] args) {
// 創(chuàng)建抽象類,抽象類不能創(chuàng)建對象
// Animal animal = new Animal();
// animal.eat();
// 創(chuàng)建小貓咪
Cat cat = new Cat();
cat.eat();
cat.playBall();
Dog dog = new Dog();
dog.eat();
dog.walk();
}
}
得到結果:
小喵咪都喜歡吃魚罐頭!
小喵咪都喜歡小球!
小狗狗都愛啃骨頭!
小狗在被我溜著!
類的大致結構:

注意:假設抽象類可以創(chuàng)建對象,但是呢,里面的抽象方法是沒有方法體給我們?nèi)崿F(xiàn),從而程序也是無法執(zhí)行,所以不讓我們創(chuàng)建對象。
?? 抽象類的一些注意點
對于抽象類的使用,以下為抽象類的使用上要注意的細節(jié):
1.抽象類不能創(chuàng)建對象,如果創(chuàng)建,編譯無法通過而報錯。只能創(chuàng)建其非抽象子類的對象。
假設創(chuàng)建了抽象類的對象,調(diào)用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。
2.抽象類中,可以有構造器,是供子類創(chuàng)建對象時,初始化父類成員使用的。
子類的構造方法中,有默認的super(),需要訪問父類構造方法。
package com.na.pojo;
/**
* 先定義一個抽象父類 --> 動物類
* 動物都有一個吃的抽象方法
*/
public abstract class Animal {
private String name;
private int age;
// 可以有構造器
public Animal(){
}
// 甚至可以有參構造器
public Animal(String name, int age){
this.name = name;
this.age = age;
}
// 定義為抽象方法后,無需去做方法實體的實現(xiàn)!
public abstract void eat();
}
3.抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
未包含抽象方法的抽象類,目的就是不想讓調(diào)用者創(chuàng)建該類對象,通常用于某些特殊的類結構設計。
4.抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則子類也必須定義成抽象類,編譯無法通過而報錯。
如果子類不重寫所有抽象方法,則類中可能會包含抽象方法。那么在創(chuàng)建對象后,調(diào)用抽象的方法,沒有意義。
5.抽象類存在的意義是為了被子類繼承,抽象類體現(xiàn)的是模板思想。
抽象類中已經(jīng)實現(xiàn)的是模板中確定的成員,抽象類不確定如何實現(xiàn)的定義成抽象方法,交給具體的子類去實現(xiàn)。
??總結
相信各位看官都對Java中的特性之一抽象的知識和使用有了一定了解,等待下一次更多Java基礎的學習吧!
讓我們也一起加油吧!本人不才,如有什么缺漏、錯誤的地方,也歡迎各位人才大佬評論中批評指正!

學到這里,今天的世界打烊了,晚安!雖然這篇文章完結了,但是我還在,永不完結。我會努力保持寫文章。來日方長,何懼車遙馬慢!
感謝各位看到這里!愿你韶華不負,青春無悔!
到此這篇關于Java抽象的本質(zhì)解析的文章就介紹到這了,更多相關Java 抽象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
手把手帶你掌握SpringBoot RabbitMQ延遲隊列
RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊列2021-09-09
Spring Security整合KeyCloak保護Rest API實現(xiàn)詳解
這篇文章主要為大家介紹了Spring Security整合KeyCloak保護Rest API實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
詳解SpringBoot緩存的實例代碼(EhCache 2.x 篇)
這篇文章主要介紹了詳解SpringBoot緩存的實例代碼(EhCache 2.x 篇),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
SpringBoot集成Quartz實現(xiàn)定時任務的方法
Quartz是一個定時任務框架,其他介紹網(wǎng)上也很詳盡。這里要介紹一下Quartz里的幾個非常核心的接口。通過實例代碼給大家講解SpringBoot集成Quartz實現(xiàn)定時任務的方法,感興趣的朋友一起看看吧2020-05-05
SpringBoot接口數(shù)據(jù)如何實現(xiàn)優(yōu)雅的脫敏問題
這篇文章主要介紹了SpringBoot接口數(shù)據(jù)如何實現(xiàn)優(yōu)雅的脫敏問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12

