從設計目的上來說,二者有如下的區別:
創新互聯從2013年創立,先為大余等服務建站,大余等地企業,進行企業商務咨詢服務。為大余企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。接口體現的是一種規范。對于接口的實現者而言,接口規定了實現者必須向外提供哪些服務;對于接口的調用者而言,接口規定了調用者可以調用哪些服務,以及如何調用這些服務。當在一個程序中使用接口時,接口是多個模塊間的耦合標準;當在多個應用程序之間使用接口時,接口是多個程序之間的通信標準。
接口體現的是一種規范和實現分離的設計哲學,充分利用接口可以極好地降低程序各模塊之間的耦合,從而提高系統的可擴展性和可維護性。基于這種原則,很多軟件架構設計理論都倡導“面向接口”編程,而不是面向實現類編程,希望通過面向接口編程來降低程序的耦合。(面向接口編程)
抽象類體現的是一種模板式設計。抽象類作為多個子類的抽象父類,可以被當成系統實現過程中的中間產品,這個中間產品已經實現了系統的部分功能,但這個產品依然不能當成最終產品,必須有更進一步的完善,這種完善可能有幾種不同方式。
從使用方式上來說,二者有如下的區別:
接口里只能包含抽象方法、靜態方法、默認方法,不能為普通方法提供方法實現;抽象類則完全可以包含普通方法。
接口里只能定義靜態常量,不能定義普通成員變量;抽象類里則既可以定義普通成員變量,也可以定義靜態常量。
接口里不包含構造器;抽象類里可以包含構造器,抽象類里的構造器并不是用于創建對象,而是讓其子類調用這些構造器來完成屬于抽象類的初始化操作。
接口里不能包含初始化塊;但抽象類則完全可以包含初始化塊。
一個類最多只能有一個直接父類,包括抽象類;但一個類可以直接實現多個接口,通過實現多個接口可以彌補Java單繼承的不足。
接口和抽象類都不能被實例化,它們都位于繼承樹的頂端,用于被其他類實現和繼承。
接口和抽象類都可以包含抽象方法,實現接口或繼承抽象類的普通子類都必須實現這些抽象方法。
下面是接口的實例代碼:
public interface Test1 {void test0(); //默認被修飾為public abstract
public static void test1(){//允許使用static修飾,但是必須加上代碼塊
};
public default void test2(){//可以使用default修飾,但是必須加上代碼塊
}
private void test3(); //接口中不允許私有方法;
protected void test4(); //接口中不允許保護方法;
int a=10; //接口中聲明的成員變量默認被public static final
}
class Test2 implements Test1{public static void main(String[] args) {System.out.println(Test1.a); //可以直接訪問接口的成員變量 說明是static修飾的
Test1.a=20; //編譯出錯 說明默認被final修飾
}
@Override
public void test0() {
}
}
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
新聞標題:【Java面試】接口和抽象類有什么區別?-創新互聯
轉載注明:http://vcdvsql.cn/article8/cdgsop.html
成都網站建設公司_創新互聯,為您提供網站改版、Google、企業建站、響應式網站、品牌網站建設、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯