摘要:多態(tài)我們繼續(xù)用貓狗案例來解釋一下為什么要重寫抽象類中的所有抽象方法。
第四章 抽象類 4.1 抽象類概述(以下內(nèi)容可能有點煩 但是通俗易懂 簡直舒服)
我們創(chuàng)建一個動物類,并且在這個類中創(chuàng)建動物對象,但是當你提到動物類,你并不知道我說的是什么動物,只有看到了具體的動物,你才知道這是什么動物,所以說動物本身并不是一個具體的事物,而是一個抽象的事物。只有真正的貓,狗才是具體的動物,同理我們也可以推理不同的動物,他們的行為習慣應(yīng)該是不一樣的,所以我們不應(yīng)該在動物類中給出具體體現(xiàn),而是給出一個聲明即可。
在Java中一個沒有方法體的方法應(yīng)該定義為抽象方法 而類中如果有抽象方法,則必須定義為抽象類
4.2_1 抽象類的特點A:抽象類和抽象方法必須用關(guān)鍵字abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能實例化→不加 {}
D:抽象類的子類
? a:是一個抽象類。
? b:是一個具體類。這個類必須重寫抽象類中的所有抽象方法。(多態(tài))
我們繼續(xù)用貓狗案例來解釋一下為什么要重寫抽象類中的所有抽象方法。
“貓”和“狗”都是“動物”這個類的實體,比如動物都有eat() 這個方法,但是狗是吃肉的,貓是吃魚的。所以每個動物關(guān)于具體吃的方式是需要在子類中重寫的,不然的話,狗和貓不就一樣了嗎?
//Animal類 public abstract class Animal { public void sleep() { System.out.println("我趴著睡"); } public abstract void eat(); }
//Dog類 public class Dog extends Animal { public Dog() { super(); } @Override public void eat() { System.out.println("我實現(xiàn)了父類方法,狗吃肉"); } }
//Cat類 public class Cat extends Animal{ public Cat() { super(); } @Override public void eat() { System.out.println("我實現(xiàn)了父類方法,貓吃魚"); } }
//測試類 public class AnimalTest { public static void main(String[] args) { Animal a1 = new Dog(); a1.sleep(); a1.eat(); System.out.println("-------------------------"); Animal a2 = new Cat(); a2.sleep(); a2.eat(); } }
我趴著睡 我實現(xiàn)了父類方法,狗吃肉 ------------------------- 我趴著睡 我實現(xiàn)了父類方法,貓吃魚
通過上面的例子我們可以看到,Dog和Cat兩個子類繼承Animal,兩者sleep()方法是一樣的均繼承于Animal類,而eat()方法由于特性不同則在Animal類中定義為抽象方法,分別在子類中實現(xiàn)。
4.2_2 抽象類的成員特點:A:成員變量:既有變量,也有常量
B:構(gòu)造方法:有構(gòu)造方法
C:成員方法:既有抽象,也有非抽象
4.2_3 抽象類的幾個小問題A:抽象類有構(gòu)造方法,不能實例化,那么構(gòu)造方法有什么用?
? 用于子類訪問父類數(shù)據(jù)的初始化
B:一個類如果沒有抽象方法,卻定義為了抽象類,有什么用?
? 為了不讓創(chuàng)建對象
C:abstract不能和哪些關(guān)鍵字共存
? a:final 沖突
? b:private 沖突
? c:static 無意義
結(jié)尾:如果內(nèi)容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^
如果能幫到你的話,那就來關(guān)注我吧!
在這里的我們素不相識,卻都在為了自己的夢而努力 ?一個堅持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74772.html
摘要:關(guān)于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關(guān)鍵字且存在抽象方法在類方法關(guān)鍵字前加了關(guān)鍵字的類。抽象類不能被直接實例化。抽象類中只定義或部分實現(xiàn)子類需要的方法。抽象類提供了具體實現(xiàn)的標準,而接口則是純粹的模板。 關(guān)于抽象類和接口的初步理解 什么是抽象類 抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 ab...
摘要:面向?qū)ο竺嫦驅(qū)ο蠡A(chǔ)面向?qū)ο笫裁词穷惥哂邢嗤瑢傩蕴卣骱头椒ㄐ袨榈囊幌盗袀€體的集合,類是一個抽象的概念。析構(gòu)函數(shù),當一個對象被銷毀前,自動調(diào)用。作用是為新克隆的對象進行初始化賦值對象序列化時,自動調(diào)用。使用抽象類的作用限制實例化。 面向?qū)ο?面向?qū)ο蠡A(chǔ) 面向?qū)ο?什么是類? 具有相同屬性(特征)和方法(行為)的一系列個體的集合,類是一個抽象的概念。 什么是對象? 從類中,拿到的具有具體...
摘要:抽象類的細節(jié)抽象類中是否有構(gòu)造函數(shù)有,用于給子類對象進行初始化。抽象方法目的僅僅為了不讓該類創(chuàng)建對象。抽象類和接口的區(qū)別抽象類只能被繼承,而且只能單繼承。抽象類中可以定義非抽象方法,子類可以直接繼承使用。抽象類使用的是關(guān)系。 定義 好處: 提高了代碼的復(fù)用性。 讓類與類之間產(chǎn)生了關(guān)系,提供了另一個特征多態(tài)的前提。 父類的由來: 其實是由多個類不斷向上抽取共性內(nèi)容而來的。 java中對于...
摘要:文字有點長,對于不想看文字的朋友,可以去這里看視頻,內(nèi)容和這個文字一樣的,視頻可能更好理解前面的課程里,我們已經(jīng)知道了什么是面向?qū)ο螅约懊嫦驅(qū)ο蟮膸讉€特征本節(jié)課,我們將把之前的理論知識搬進里之前女媧造人的例子中,女媧創(chuàng)造了各種設(shè)計方案在大 文字有點長,對于不想看文字的朋友,可以去這里看視頻,內(nèi)容和這個文字一樣的,視頻可能更好理解https://www.piqizhu.com/v/rm...
摘要:很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。 在討論它們之間的不同點之前,我們先看看抽象類...
閱讀 931·2023-04-26 01:34
閱讀 3365·2023-04-25 20:58
閱讀 3296·2021-11-08 13:22
閱讀 2119·2019-08-30 14:17
閱讀 2527·2019-08-29 15:27
閱讀 2680·2019-08-29 12:45
閱讀 3006·2019-08-29 12:26
閱讀 2818·2019-08-28 17:51