JAVA 基礎知識點複習(十一)抽象類和接口

抽象類abstract

描述一個事物卻沒有足夠的信息,這時就稱這個事物爲抽象事物。

(1)如果存在抽象方法則該類一定要是個抽象類,反之則不一定

(2)抽象類不能實例化,子類必須重寫所有的抽象方法纔可以實例化

public abstract class Animal {

    public abstract void getName();

    protected abstract void getGender();
    
    abstract void getGender(); // 包外無法重寫該方法
    
    private abstract void getGender(); // 編譯錯誤
    
    public final abstract void getGender(); // 編譯錯誤
    
    public static abstract void getGender(); // 編譯錯誤
    
}

問題:

1.抽象類中有構造函數嗎? 有,還可以給子類初始化

2.抽象類一定是一個父類嗎? 一定,如果不是父類的話就失去存在的意義了

3.抽象類可以不定義任何抽象方法嗎? 可以,但是沒意義(爲了讓對象不能被new)

4.abstract和哪些關鍵字不能共享? final(不能被繼承、重寫)private(外部無法訪問)static(不能被重寫)

接口interface

如果一個抽象類中的所有方法都是抽象的,那麼就可以用接口來表示

(1)接口只能由全局常量(默認修飾符 public static final)和抽象方法(默認修飾符 public abstract)組成

(2)類和接口間是實現關係,一個類可以實現多接口,接口和接口間是多繼承關係

(3)接口的另一個應用是多態

public interface Barking {

    String SOUND = "";

    void getSound();
    
    default void defaultMethod(){} // jdk1.8 接口默認方法
    
    static void staticMethod(){} // jdk1.8 接口靜態方法
}

靜態方法

定義:接口可以聲明靜態方法並且實現,無法被實現類重寫和調用,相當於類方法只能被自身調用

實例:Stream接口

public interface Barking {
    static void staticMethod(){
        System.out.println("Barking static");
    }
}

public static void main(String[] args) {
	Animal.staticMethod();
}

默認方法

​ 在java8以前如果想要在一個已使用的接口增加方法,則需要在所有實現類中都新增這個方法,而默認方法則解決了這個問題,它提供了一個默認實現,當沒有顯示提供其他實現時就採用這個實現,並且它是可選的,並不強制實現,子類可以根據不同的需求進行重寫。

定義:接口可以聲明默認方法並且實現,可以被實現類可選擇的重寫

  • 當實現的多個接口中有相同簽名的默認方法時,必須在實現類中通過重寫方法解決衝突,並且可以通過接口名.super.方法名(); 的方式顯示調用需要的方法。
  • 當繼承的父類和實現的接口中有相同簽名的方法時,優先使用父類的方法。
  • 當接口的父接口中也有同樣的默認方法時,就近原則調用子接口的方法。
public interface Barking {
    default void defaultMethod(){
        System.out.println("Barking default");
    }
}

public interface Eat {
    default void defaultMethod(){
        System.out.println("Eat default");
    }
}

public class Dog implements Barking , Eat {
    @Override
    public void defaultMethod() {
        Animal.super.defaultMethod();
    }
}

異同點

1.抽象類可以定義成員變量、抽象方法和非抽象方法,接口只能定義抽象方法(jdk1.8後增加默認方法和靜態方法)和全局常量

2.非抽象類實現一個接口就必須重寫所有抽象方法,而抽象類不需要

3.抽象類主要用來抽象類別,接口用來抽象功能,當你關注一個事物的本質時用抽象類,當你關注一個操作時用接口

例:豬、狗、貓 對應的抽象類就是動物。對應的接口可以有叫聲、食物等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章