1. 程式人生 > >介面和抽象類的區別和作用

介面和抽象類的區別和作用


1.介面(interface),介面被用來建立類與類之間關聯的標準。

Java code
publicinterface ITest{ publicvoid test(); } publicclass TestImpl implements ITest{ publicvoid test(){ System.out.println("test"); } }


2.抽象類(abstract class),只要類中有一個抽象方法,此類就被標記為抽象類。實際上抽象類除了被繼承之外沒有任何意義。

區別
1.
介面是公開(public)的,裡面不能有私有的方法或變數,是用於讓別人使用的,實現介面的一定要實現接口裡定義的所有方法。
而抽象類是可以有私有方法或私有變數的,實現抽象類可以有選擇地重寫需要用到的方法,但是必須實現裡面所有的抽象方法。
2.
抽象類在 Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。
但是,一個類卻可以實現多個interface(java中實現多重繼承的方法之一)。
3.
抽象類中可以有自己的資料成員,也可以有非abstarct的成員方法。
而在介面中,只能夠有靜態的不能被修改的資料成員(也就是必須是 static final的,不過在 interface中一般不定義資料成員),而且所有的成員方法都是抽象的。
4.
抽象類和介面所反映出的設計理念不同。
其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。(組合是"has a"關係)
5.
介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
抽象類中的變數預設是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。不是很建議具體類直接實現介面的。還有一種設計模式是面向介面程式設計,而非面向實現程式設計。

其實介面是抽象類的延伸,可以將它看做是純粹的抽象類,就是說介面比抽象類還抽象,還有設計介面的目的就是為了實現C++中的多重繼承,不過java團隊設計的一樣更有趣的東西來實現這個功能,那就是內部類(inner class)。

內部類(inner class)

Java code
publicclass OuterClass{//外部類privateclass InnerClass{}//內部類}



一.定義
放在一個類的內部的類我們就叫內部類。
二.作用
1.內部類可以很好的實現隱藏,也就是封裝性。一般的非內部類,是不允許有 private 與protected許可權的,但內部類可以
2.內部類擁有外圍類的所有元素的訪問許可權
3.可是實現多重繼承(這個特點非常重要,個人認為它是內部類存在的最大理由之一)
4.可以避免修改介面而實現同一個類中兩種同名方法的呼叫
三.多重繼承的實現

類一

Java code
publicclass Example1 { public
String getName() { return"luffyke" ; } }



類二

Java code
publicclass Example2 { publicint getAge() { return25 ; } }



類三


Java code
publicclass MainExample { publicclass Test1 extends Example1 { public String getName() {
returnsuper.getName(); } } publicclass Test2 extends Example2 { publicint getAge() { returnsuper.getAge(); } } public String showName() { returnnew Test1().getName(); } publicint showAge() { returnnew Test2().getAge(); } publicstaticvoid main(String args[]) { MainExample example =new MainExample(); System.out.println("姓名:"+ example.showName()); System.out.println("年齡:"+ example.showAge()); } }



大家注意看類三,裡面分別實現了兩個內部類 Test1,和Test2 ,Test1類又繼承了Example1,Test2繼承了Example2,這樣我們的類三MainExample就擁有了Example1和 Example2的方法和屬性,也就間接地實現了多繼承。

相關推薦

Java特性-介面抽象區別

抽象類是自底向上抽象出來的,介面則是自頂向下設計出來的。 抽象類是對事物本身的抽象,比如貓類,狗類就可以抽象為動物類。 介面是對行為的抽象,比如男人要吃飯,女人也要吃飯,吃飯就可以抽象為介面。 抽象類表示的是這個物件是什麼,介面表示的是這個物件能幹什麼。 所以

c#中介面抽象區別

轉載自:https://www.c-sharpcorner.com/article/overview-of-abstract-class-and-interface/ Introduction In this article, I will explain about abstrac

介面抽象 區別

/** * 抽像類和介面 區別 : * * 首先抽象類 * * 1.抽象類不能被例項化,但可以被申明 * 2.抽象類不一定包含抽像方法 * 3.一旦類包含了Abstract 方法那麼這個類必須宣告 關鍵字 Abstract * 4.抽像放不放不能有主體就是方法體 *

java介面抽象區別作用(功能、用途、好處)

Java介面: 總結了4點關於JAVA中介面存在的意義:        1、重要性:在Java語言中, abstract class 和interface 是支援抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向物件能力。

介面抽象區別作用

1.介面(interface),介面被用來建立類與類之間關聯的標準。 Java code publicinterface ITest{ publicvoid test(); } publicclass TestImpl implements ITest{

JAVA:介面抽象區別

1.從設計層面來說,抽象是對類的抽象,是一種模板設計 ,介面是行為的抽象,是一種行為的規範 介面 interface 抽象類 介面中所有方法都是抽象的 抽象類中可以有抽象方法和普通方法 一

介面抽象區別

首先是基本定義 介面: 使用介面(interface),可以指定某個類必須實現哪些方法,但不需要定義這些方法的具體內容。 介面是通過 interface 關鍵字來定義的,就像定義一個標準的類一樣,但其中定義所有的方法都是空的。 介面中定義的所有方法都必須是公有,這

java介面抽象區別

全域性變數的區別 介面中所有的全域性變數預設為 public static final,處於方法區的常量池中,且是靜態域中的成員 抽象類的全域性變數無硬性約束 方法的區別 介面 介面

c#介面抽象區別

   大家都容易把這兩者搞混,我也一樣,在聽李建忠老師的設計模式時,他也老把抽象類說成介面,弄的我就更糊塗了,所以找了些網上的資料.       一、抽象類:     

【PHP面向物件】介面抽象區別各自的用法

author:咔咔 wechat:fangkangfk   介面: 介面是用interface宣告的 介面中定義的方法都是公共的 介面只需要宣告自定義方法不需要具體內容 實現介面使用implements實現,介面支援多實現,使用逗號隔開即可 繼承介面的類

介面抽象的使用上的區別選擇

    介面與抽象類的使用上的區別和選擇:       首先,對於抽象類它的作用主要用於繼承和重寫,裡面可以有普通方法,但在設計上面,通常把其派生類的共有屬性和方法抽象出來,其中所有派生類中不變的方法,在抽象類中用普通方法寫出來,而所有派生類中變化的

JAVA面試題:介面抽象區別聯絡

一、介面的概念: 介面(Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合。介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 如果一個類只由抽象方法和全域性常量組成,那麼這種情況下不會將其定義為一個抽象類。只

Java序列化的方式、object中的方法、介面抽象區別、ArrayList在迴圈過程中刪除

Java序列化的方式 a.是相應的物件實現了序列化介面Serializable,這個使用的比較多,對於序列化介面Serializable介面是一個空的介面,它的主要作用就是標識這個物件時可序列化的,jre物件在傳輸物件的時候會進行相關的封裝。 b.Externlizab

介面抽象區別

介面和抽象類有什麼區別 介面和抽象類的概念不一樣。 介面是對動作的抽象,抽象類是對根源的抽象。 抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也

java抽象abstract介面interface的區別

                                     抽象類    &

介面抽象有什麼區別

介面和抽象類都是繼承樹的上層,他們的共同點如下: 1)都是上層的抽象層。 2)都不能被例項化 3)都能包含抽象的方法,這些抽象的方法用於描述類具備的功能。 區別如下: 1)在抽象類中可以寫非抽象的方法,

【詳細】JAVA中介面抽象區別

介面是常用的,在這裡都不舉例程式碼了 抽象類 介面 實現方式 實現方式 介面完全是抽象的。它根本不存在方法的實現 介面完全是抽象的。它根本不存在方法的實現 構造器 構造器 抽

一、面試準備--介面抽象有什麼區別

對於面向物件程式設計來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:介面和抽象類。 首先,看一下兩者的定義: 抽象類 抽象類是用來捕捉子類的通用特性的 。它不能被例項化,只能被用作子類的超類。抽象類是被用來建立繼承層級裡子類的模板。

介面的概述,特點以及介面抽象區別

第1章 介面 1.1 介面的概述 介面是功能的集合,同樣可看做是一種資料型別,是比抽象類更為抽象的”類”。 介面只描述所應該具備的方法,並沒有具體實現,具體的實現由介面的實現類(相當於介面的子類)來完成。這樣將功能的定義與實現分離,優化了程式設計。 1.2 介面的格式&使用 1.

Java - 介面抽象區別

介面和抽象類有什麼區別 介面和抽象類的概念不一樣。 介面是對動作的抽象,抽象類是對根源的抽象。 抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。比如,男人,女人,這兩個類(如果是類的話……),他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,你可以