package com.company; /** * 抽象類繼承 * 用abstract修飾類就是抽象類 * 用abstract修飾方法就是抽象方法(一般使用比較少) * 抽象類不能被實例化 */ public class Main { public static void main(String[] args) { Animal an = new Cat(); an.cry(); //輸出 “貓叫,喵喵喵” an = new Dog(); an.cry(); //輸出 “狗叫,汪汪汪” Cat cat1 = new Cat(); cat1.eat(); //輸出 “貓愛吃魚” } } /** * 定義一個動物抽象類 */ abstract class Animal { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } abstract public void cry(); } /** * 貓類(繼承動物類) */ class Cat extends Animal { /** * 實現抽象父類中的具體方法 */ @Override public void cry() { System.out.println("貓叫,喵喵喵"); } /** * 子類自有方法 */ public void eat() { System.out.println("貓愛吃魚"); } } /** * 狗類(繼承動物類) */ class Dog extends Animal { /** * 實現抽象父類中的具體方法 */ @Override public void cry() { System.out.println("狗叫,汪汪汪"); } }
抽象類:
抽象類就是不能使用new方法進行實例化的類(不能被實例化,可以有多個抽象方法),即沒有具體實例對象的類,抽象類有點類似於“模板”的作用,目的是根據其格式來創建和修改新的類,對象不能由抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象,當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract,在抽象類中的成員方法可以包括一般方法和抽象方法
抽象類的關鍵字:abstract
abstract 關鍵字,和哪些關鍵字不能共存?
final:被final修飾的類不能有子類。而被abstract修飾的類一定是一個父類。
private: 抽象類中的私有的抽象方法,不被子類所知,就無法被復寫。
而抽象方法出現的就是需要被復寫。
static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調用就可以了
java中抽象類的特點:
1. 如果一個類中有抽象方法,那么這個類一定是抽象類
2. 抽象類中不一定有抽象方法
3. 抽象類中可以存在抽象方法
4. 抽象類中可以存在構造方法
5. 抽象類中可以存在普通屬性、方法、靜態屬性和靜態方法
6. 抽象類中的抽象方法需要有子類實現,如果子類不實現,則子類也需要定義為抽象的
7,抽象方法和抽象類都必須被abstract關鍵字修飾。
8,抽象類不可以用new創建對象。因為調用抽象方法沒意義
9:抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法
接口和抽象類的區別之處:
1. 接口中所有的方法隱含都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法
2. 類可以實現很多個接口,但是只能繼承一個抽象類
3. 類可以不實現抽象類和接口聲明的所有方法,在這種情況下,類也必須得聲明成是抽象的
4. 抽象類可以在不提供接口方法實現的情況下實現接口
5. java接口中聲明的變量默認都是final的,抽象類可以包含非final變量
6. java接口中的成員函數默認都是public的,抽象類中的成員函數可以是private,protected或者是public的
7. 接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是如果它包含main方法的話是可以被調用的