摘要:多態我們繼續用貓狗案例來解釋一下為什么要重寫抽象類中的所有抽象方法。
第四章 抽象類 4.1 抽象類概述(以下內容可能有點煩 但是通俗易懂 簡直舒服)
我們創建一個動物類,并且在這個類中創建動物對象,但是當你提到動物類,你并不知道我說的是什么動物,只有看到了具體的動物,你才知道這是什么動物,所以說動物本身并不是一個具體的事物,而是一個抽象的事物。只有真正的貓,狗才是具體的動物,同理我們也可以推理不同的動物,他們的行為習慣應該是不一樣的,所以我們不應該在動物類中給出具體體現,而是給出一個聲明即可。
在Java中一個沒有方法體的方法應該定義為抽象方法 而類中如果有抽象方法,則必須定義為抽象類
4.2_1 抽象類的特點A:抽象類和抽象方法必須用關鍵字abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能實例化→不加 {}
D:抽象類的子類
? a:是一個抽象類。
? b:是一個具體類。這個類必須重寫抽象類中的所有抽象方法。(多態)
我們繼續用貓狗案例來解釋一下為什么要重寫抽象類中的所有抽象方法。
“貓”和“狗”都是“動物”這個類的實體,比如動物都有eat() 這個方法,但是狗是吃肉的,貓是吃魚的。所以每個動物關于具體吃的方式是需要在子類中重寫的,不然的話,狗和貓不就一樣了嗎?
//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("我實現了父類方法,狗吃肉"); } }
//Cat類 public class Cat extends Animal{ public Cat() { super(); } @Override public void eat() { System.out.println("我實現了父類方法,貓吃魚"); } }
//測試類 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(); } }
我趴著睡 我實現了父類方法,狗吃肉 ------------------------- 我趴著睡 我實現了父類方法,貓吃魚
通過上面的例子我們可以看到,Dog和Cat兩個子類繼承Animal,兩者sleep()方法是一樣的均繼承于Animal類,而eat()方法由于特性不同則在Animal類中定義為抽象方法,分別在子類中實現。
4.2_2 抽象類的成員特點:A:成員變量:既有變量,也有常量
B:構造方法:有構造方法
C:成員方法:既有抽象,也有非抽象
4.2_3 抽象類的幾個小問題A:抽象類有構造方法,不能實例化,那么構造方法有什么用?
? 用于子類訪問父類數據的初始化
B:一個類如果沒有抽象方法,卻定義為了抽象類,有什么用?
? 為了不讓創建對象
C:abstract不能和哪些關鍵字共存
? a:final 沖突
? b:private 沖突
? c:static 無意義
結尾:如果內容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^
如果能幫到你的話,那就來關注我吧!
在這里的我們素不相識,卻都在為了自己的夢而努力 ?一個堅持推送原創Java技術的公眾號:理想二旬不止
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74772.html
摘要:關于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關鍵字且存在抽象方法在類方法關鍵字前加了關鍵字的類。抽象類不能被直接實例化。抽象類中只定義或部分實現子類需要的方法。抽象類提供了具體實現的標準,而接口則是純粹的模板。 關于抽象類和接口的初步理解 什么是抽象類 抽象類是指在 class 前加了 abstract 關鍵字且存在抽象方法(在類方法 function 關鍵字前加了 ab...
摘要:抽象類的細節抽象類中是否有構造函數有,用于給子類對象進行初始化。抽象方法目的僅僅為了不讓該類創建對象。抽象類和接口的區別抽象類只能被繼承,而且只能單繼承。抽象類中可以定義非抽象方法,子類可以直接繼承使用。抽象類使用的是關系。 定義 好處: 提高了代碼的復用性。 讓類與類之間產生了關系,提供了另一個特征多態的前提。 父類的由來: 其實是由多個類不斷向上抽取共性內容而來的。 java中對于...
摘要:文字有點長,對于不想看文字的朋友,可以去這里看視頻,內容和這個文字一樣的,視頻可能更好理解前面的課程里,我們已經知道了什么是面向對象,以及面向對象的幾個特征本節課,我們將把之前的理論知識搬進里之前女媧造人的例子中,女媧創造了各種設計方案在大 文字有點長,對于不想看文字的朋友,可以去這里看視頻,內容和這個文字一樣的,視頻可能更好理解https://www.piqizhu.com/v/rm...
摘要:很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。在討論它們之間的不同點之前,我們先看看抽象類接口各自的特性。抽象類抽象類是用來捕捉子類的通用特性的。 很多常見的面試題都會出諸如抽象類和接口有什么區別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。 在討論它們之間的不同點之前,我們先看看抽象類...
閱讀 928·2023-04-26 01:34
閱讀 3363·2023-04-25 20:58
閱讀 3287·2021-11-08 13:22
閱讀 2118·2019-08-30 14:17
閱讀 2526·2019-08-29 15:27
閱讀 2679·2019-08-29 12:45
閱讀 3003·2019-08-29 12:26
閱讀 2816·2019-08-28 17:51