介面與抽象類的對比
定義:
抽象類:無法具體描述事物時,使用抽象類。
介面:擴充套件功能。
定義格式:
抽象類:abstract class 類名a{}
介面:inte***ce 介面名b{}
使用場景:
抽象類:主要用來抽象類別。
介面:主要用來抽象功能。
比如:子類除了需要重寫父類的abstract方法,還需要從父類繼承一些變數或繼承一些重要的非abstract方法,就可以考慮用abstract類。如果某個問題不需要繼承,只是需要若干個類給出某些重要的abstract方法的實現細節,就可以考慮使用介面。
繼承:
抽象類:是單一繼承的,不能繼承多個類,但父類可以有祖先類。
介面:可以同時實現多個介面(多重繼承)。
例項化:
抽象類:不能例項化(因為抽象的東西不能具體描述)。
介面:不能例項化(因為介面中方法本身都是抽象的,介面本身也是抽象的)。
實現方式:
抽象類:需要被子類繼承。
介面:需要被類實現。
方法的實現:
抽象類:方法有抽象方法和非抽象方法,即可以有具體的方法實現,也可以沒有具體的方法。可以對方法宣告,也可以實現方法。
介面:都是抽象方法,只能做方法的宣告,不能實現方法。
方法:
抽象方法:沒有方法體,以分號結束。
抽象類:如果是含有抽象方法,那麼子類在繼承時需要重寫父類中的所有抽象方法,或者子類必須也得是抽象類。(因為抽象類就是用來繼承的,子類在繼承時把父類的抽象方法繼承過來了,那麼子類就必須是抽象方法,如果子類不想定義為抽象方法,那麼子類就不能出現抽象方法,所以需要重寫父類中的抽象方法。) 父類中如果有static方法,子類必須用static方法覆蓋。
介面:介面中的所有方法都是抽象的,因為介面中的方法系統預設是
public abstract
。所以,在實現介面時,子類必須對介面中的所有方法進行重寫。如果某乙個子類只用到介面中的個別方法,那麼對其他方法必須也得重寫,只是他們的方法體為空。在方法重寫時,由於介面的方法訪問修飾符是public,而方法重寫要求子類的訪問許可權不能父類的訪問許可權,所以子類的訪問修飾符不能省略(省略的時候修飾符預設是友好的,訪問許可權低於public)。
構造方法:
抽象類:有構造方法。因為子類在建立物件初始化時,由於子類繼承父類,需要先對父類進行初始化。
介面:無構造方法。因為在介面中的成員變數是系統預設新增修飾符:
public final static,有final的存在,變數不能做修改,所以就變成了成員常量。既然沒有成員變數了,那麼就不需要初始化,所以也用不到構造方法。因為構造方法就是用來初始化的。
成員變數:
抽象類:有。
介面:無。因為成員變數系統預設的修飾符是final,所以就成了常量。
成員常量:
抽象類:有。
介面:有。(final修飾了)
修飾符:
抽象類:抽象方法不能用private、final來修飾,因為這兩個次修飾之後就不能被子類繼承了,就更不能被重寫了。
介面:方法預設修飾符:public、static。屬性預設修飾符:public、static、final
抽象類與介面(概念,對比)
1.介面 今天是星期日,我們沒有上課。而我也沒有閒著,複習一下昨天學的抽象類和介面,首先說一下介面,介面的概念是可屬於任何類或結構的一組相關功能所以實現介面的類或結構必須實現介面定義中指定的介面成員。介面使用inter face 關鍵字進行定義,可由方法,屬性,事件。索引器或這四種成員型別的任意組合...
對比抽象類和介面
1 abstract關鍵字只能修飾類和方法,不能修飾字段。2 抽象類不能被例項化 通俗點講,不能被new 只能被繼承。3 抽象類可以包含屬性,方法,構造方法,初始化塊,內部類,列舉類,和普通類一樣,普通方法一定要實現,變數可以初始化或不初始化,但是不能初始化後再在抽象類中重新賦值或操作該變數 只能在...
對比介面 抽象類的區別
介面 抽象類在介面中僅能定義成員,但 不能有具體的實現。抽象類除了抽象成員以外,其他成員允許有具體的實現 在介面中不能宣告字段,並且不能宣告任何私有成員,成員不能包含任何修飾符。在抽象類中能宣告任意成員,並能使用任何修飾符來修飾。介面能使用 類或者結構體 來繼承。抽象類僅能使用類繼承。在使用類來實現...