咱們建立一個動物類,而且在這個類中建立動物對象,可是當你提到動物類,你並不知道我說的是什麼動物,只有看到了具體的動物,你才知道這是什麼動物,因此說動物自己並非一個具體的事物,而是一個抽象的事物。只有真正的貓,狗才是具體的動物,同理咱們也能夠推理不一樣的動物,他們的行爲習慣應該是不同的,因此咱們不該該在動物類中給出具體體現,而是給出一個聲明便可。
在Java中一個沒有方法體的方法應該定義爲抽象方法 而類中若是有抽象方法,則必須定義爲抽象類java
A:抽象類和抽象方法必須用關鍵字abstract修飾ide
B:抽象類中不必定有抽象方法,可是有抽象方法的類必定是抽象類測試
C:抽象類不能實例化→不加 {}code
D:抽象類的子類對象
a:是一個抽象類。繼承
b:是一個具體類。這個類必須重寫抽象類中的全部抽象方法。(多態)class
咱們繼續用貓狗案例來解釋一下爲何要重寫抽象類中的全部抽象方法。變量
「貓」和「狗」都是「動物」這個類的實體,好比動物都有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類中定義爲抽象方法,分別在子類中實現。im
A:成員變量:既有變量,也有常量
B:構造方法:有構造方法
C:成員方法:既有抽象,也有非抽象
A:抽象類有構造方法,不能實例化,那麼構造方法有什麼用?
用於子類訪問父類數據的初始化
B:一個類若是沒有抽象方法,卻定義爲了抽象類,有什麼用?
爲了避免讓建立對象
C:abstract不能和哪些關鍵字共存
a:final 衝突
b:private 衝突
c:static 無心義
若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^
若是能幫到你的話,那就來關注我吧!
在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤一個堅持推送原創Java技術的公衆號:理想二旬不止