1.接口與抽象類的區別(都不能被實例化)
一個子類只能繼承一個抽象類,但能實現多個接口
方法:
抽象類可以沒有抽象方法,它可以有普通方法,可以有靜態方法。而接口中必須都是抽象方法,不能有靜態方法。
變量常量:
抽象類中可以定義常量,變量(且訪問類型任意)。而接口中只能定義常量。(public static final )接口中必須要有具體的實現才有意義,所以為public;接口中的數據對所有實現類只有一份,所以為static;接口中的常量只讀不改,才能為實現接口的對象提供一個統一屬性,所以用final。
構造方法:
因為它們都不能被實例化,接口沒有構造方法,但是抽象類可以有構造方法,
2.為什么抽象類和接口中不能有靜態的抽象方法?
抽象類不能實例化,即不能被分配內存。而靜態方法在類的實例化之前就被分配了內存。所以出現了矛盾。
定義抽象方法的目的是重寫此方法,而靜態方法不能被重寫(編譯時就已經被確定了)。
3.抽象類可以繼承普通類,但前提是普通類必須有明確的構造函數。(構造函數不能私有)
普通類也可以繼承抽象類,對于抽象類的非抽象方法,可以選擇性覆寫。但不能覆寫靜態方法。
4.抽象類可以繼承抽象類
(如果一個子類沒有實現抽象父類的所有抽象方法,那么該子類須定義為abstract類型)