1. 程式人生 > >接口裡可以有變數麼?

接口裡可以有變數麼?

一般物件比如有個具體的類Person已定義好,要例項化它, 採取的語法是  Person objPerson = new Person();

但介面(如IConnection)不能這麼做,其不能直接New 自己,如 IConnection objIConnection = new IConnection(),

這就是說"照例不可以生成介面的物件"的含義.

但面向物件都具有多型,可以向上轉型, 比如某個類實現了該介面,如類Connection實現了該介面,則Connection類的

例項化物件可以給IConnection介面. 如 IConnection objIConnection = new Connection()

然後程式設計都基於介面進行操作,這樣脫離了具體的類的實現,在某些場合就更靈活和易於擴充.

把變的東西抽象出來了,成了介面,反倒就讓程式碼相對固定了,能適應變化的情況.

介面不能實列化,但是可能通過某些類建立介面的對類

==================================================

介面不能“直接”例項化。--msdn  //沒說不能“間接” “間接”例項化介面    介面 例項 = new 實現介面的類() 長見識 

===================================================

類-抽象類-介面總結   近期通過對Java一些基礎知識的學習,我熟悉了類抽象類以及介面這三個概念,先將其區別與聯絡總結如下! 1 三者最大的[color=indigo]區別在[u][/u]於類具有構造器從而可以來構造物件!而抽象類與介面中的方法都是未完全實現,他們都是一種抽象模型,不具備構造物件的能力!但是可以通過實現(implements)介面和繼承(extends)抽象類來建立類從而來構造物件! 2在定義上:類的定義模式是public+class+類名[b]

;抽象類的定義public+abstract+clas+類名;介面的定義格式public+interface+類名 3在方法上類的方法必須有實現而抽象類的方法可以根據需要部分實現;而介面中的方法只能有其定義沒有具體的實現,就是說介面中的方法都是抽象的方法!抽象類中可以有非抽象方法。介面中則不能有實現方法 4抽象類和介面在繼承和實現時子類對父類中未實現的方法必須實現可對其進行重寫! 5介面中定義的變數預設是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變!

=============================================================

抽象類,通過繼承它實現多型,後期繫結,可以為將來要實現的東西做好介面,實現重用性。

InterfaceA IA = new InterfaceA();

編譯器報錯:Cannot instantiate the type TA 指明介面只能被宣告,不能被例項化。

簡單工廠設計模式

設定一個Class名稱是AClass,在面向物件程式設計中,一般一個Class都會繼承一個介面,設定AClass的介面為AInterface,那麼生成AClass的物件方法如下:

                                    AInterface  a = new AClass();

改寫成下列方式: AInterface  a = Afactory.create();    //程式碼2

Afactory的create方法封裝了具體建立細節。解耦了建立過程和使用過程,系統可擴充套件性增強,穩定性增強。 Afactory的create方法程式碼:     public static AInterface create(){          ……         return new AClass();    }

上面程式碼2這一行是使用Afactory的create方法來生成AInterface例項。

由於是初學者,之前一直對上面這句很困惑,前幾天看到一個用抽象類實現介面的案例,為什麼不直接用抽象類的例項的方法?

網上的解答:

介面是強制性的,它的所有方法都要實現。

但是抽象類不是,比如說一個介面,你只用到其中的一兩個方法,可是如果直接實現介面需要實現裡面的五個方法,這時候你可以先讓抽象類實現介面,然後你的類繼承介面,就不需要都實現介面的方法了而且介面的抽象層次要更高,是一種契約,抽象類是提供了很多的方法,給你用,沒有強制性。

抽象類和介面比起來,有一個好處,就是某些函式可以實現具體的方法,而並不一定是宣告抽象的方法,而介面只能宣告抽象方法,所以用一個抽象類來實現某個介面可以實現一些通用的方法,而這些具體實現的方法裡還可以呼叫抽象方法,所以減少了子類中的重複程式碼

=======================================================

我也談談抽象類和介面的理解,它們最根本的區別是:
  • 抽象類的子類是繼承,而介面的子類是實現.唯一性的繼承讓子類有其父類除私有外的一切責任和義務,意味著更與父類有更緊密的耦合;介面則不是唯一的,可根據需要實現或不實現,這種可選擇性意味著鬆耦合和靈活.
所以,如果是極少變動的,或者說內建的特徵,我們用抽象類,比如性別,一旦出生,性別就固定,那繼承自male類即使高耦合也沒什麼影響.但你從事什麼職業,卻是很可能變動的,你今天可能是程式設計師,明年則可能幹起了個體戶,那implement一個programmer介面更合適.其實你也許已經注意到,一旦你繼承male類,你就和male緊密的耦合了,因為你一輩子都生不了孩子,而不像programmer那樣,你還有的選...

強烈推薦"敏捷軟體開發-原則模式和實踐"這本書,對提高編碼質量,或將思維從實現提升設計層面,都很有幫助.

相關推薦

口裡可以變數

一般物件比如有個具體的類Person已定義好,要例項化它, 採取的語法是  Person objPerson = new Person(); 但介面(如IConnection)不能這麼做,其不能直接New 自己,如 IConnection objIConnection = new IConnection

Java中口裡定義的成員變數

在interface裡面的變數都是public static final 的。所以你可以這樣寫:public static final int i=10;或則int i=10;(可以省略掉一部分) 注意在宣告的時候要給變數賦予初值 解釋: 首先你要弄清介面的含義.介面就是提供

口裡定義的成員變數必須是public static final型別

在interface裡面的變數都是public static final 的。所以你可以這樣寫:   public static final int i=10;   或則   int i=10;(可以省略掉一部分)   注意在宣告的時候要給變數賦予初值   解釋:   首先

為什麼Java口裡使用public static final修飾成員變數

為什麼介面中的常量必須使用public static final修飾 public: 使介面的實現類可以使用這個常量 static:static修飾就表示它屬於類的,隨的類的載入而存在的,如果是非static的話,     就表示屬於物件的,只有建立物件時才有它,而介面是不

為什麼口裡的成員變數必須是public static final的?

public這個不用說了介面是高層次的抽象,也可以理解為標準,既然是標準,那標準裡定義的屬性肯定不是為某一個具體實現標準的物件設定的,它應該是實現標準的物件們所共有的屬性,因此介面中的成員變數是static的。至於final我們可以舉個例子:現在有一個介面IA,A1和A2都實

C#.NET裏面抽象類和什麽區別

end 吃飯 動物 虛方法 根據 自定義 private this sse 1.面向接口編程和面向對象編程是什麽關系 首先,面向接口編程和面向對象編程並不是平級的,它並不是比面向對象編程更先進的一種獨立的編程思想,而是附屬於面向對象思想體系,屬於其一部分。或者說,

調用淘寶每IP數量/時間限制-負載均衡解決

net其實標題不太準確,不過原理是一樣。 這裏要解決的問題是:調用淘寶接口有每IP數量/時間限制,但是我們的調用量較大,有可能超過這個限制,從而導致可能被淘寶屏蔽一小段時間。為了解決這個問題,我們需要用多個公網ip去掉接口。而實現這一點的最好地方就是在路由器這一級別。 簡要做法如下:1)做一臺linux路由器

一個多個實現類的調用方式

article 調用 his ace div test 準備 color qualifier 1、普通方式實現: // 定義一個接口 interface Person { void eat(String str); } // 第一個實現類 class Firs

java—抽象類和什麽區別

單繼承 另一個 ava div 部分 ati 使用 同時 靜態代碼塊 簡單的說,使用abstract修飾的類就是抽象類,抽象類中可以不包含抽象方法(由abstract修飾的方法),抽象類中也可以包含普通類中的方法和成員變量。一個普通類繼承抽象類則必須實現該抽象類中的所有抽象

架構師百度雲連失效期,快點保存1天後刪除)

HP ava SQ 從入門到精通 開發 AC nod PQ 連接 1. PS大師之路視頻教程鏈接: https://pan.baidu.com/s/1mjYbcJA密碼:pqdt2.HTML5+CSS3從入門到精通.iso 鏈接:https://pan.baidu.com/

抽象類和什麽區別

.net control style isp detail tails tro 方法 csdn JDK7中抽象類和接口的區別 JDK8新特性:接口的靜態方法和默認方法 抽象類和接口有什麽區別

實現多個具有相同方法的口和父類與實現相同方法

不顯示 就是 super關鍵字 向上 向上轉型 問題 super void urn 一、實現多個具有相同方法的接口 這種情況還是比較少會遇到的,但事實是存在這樣的問題,所以寫下解決的方法: 使用內部類: interface InterA { void f(); } in

口裡的default,static方法

我們都知道接口裡的變數預設隱含型別是public static final,也是就是說是常量。而方法預設型別是public abstract,所以介面的方法都是抽象方法,但是事實真的是這樣嗎? 我的PC上安裝的是jdk1.8,一次編寫介面程式碼的時候,看到接口裡的方法竟然可以定義為def

關於執行緒池工作原理,任務拒策略哪幾種

 在ThreadPoolExecutor類中提供了四個構造方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class ThreadPoolExecutor extends 

左連

src info style bsp -c alt right -s fcc (+)在等號的左邊表示右連接; (+)在等號的右邊表示左連接。 右連接 RIGHT JOIN 左連接 Left join 左連接,有連接

口裡的default方法

我們都知道接口裡的變數預設隱含型別是public static final,也是就是說是常量。而方法預設型別是public abstract,所以介面的方法都是抽象方法,但是事實真的是這樣嗎? 我的PC上安裝的是jdk1.8,一次編寫介面程式碼

普通人怎樣投資區塊鏈區塊鏈賺錢風險

礦池,是比特幣礦工為了使挖礦收益更為穩定而結成的共同挖礦團體。現在單人挖礦已經不太可能挖出比特幣了。由於全網的算力增漲很快,單個礦工挖得比特幣的概率越來越低。 當然,並不是沒有可能,只是概率很低。這意味著單個礦工需要很長時間才能挖到比特幣。而加入礦池,可以

區塊鏈賺錢風險

從物物交換到產生貨幣,貨幣的本質應該是體現物品的價值,但是現在比特幣忽高忽低,變成了炒作的工具,反倒是在體現美元、人民幣的價值,所以比特幣本身已經失去了物物交換的價值,也就是失去了作為貨幣的價值。 其次,貨幣被賦予了調節經濟的作用,但比特幣因為限量,必然是失去

以BAT的視角看運維前途?(一)

運維有前(錢)途麼? 這是個理論且枯燥的話題,但很多人又不得不面對。 今天我以自己在小公司、百度、阿里的工作經歷,主要以bat的視角,來說下運維技術在未來網際網路的發展前景。 通過這篇文章,你會了解到小公司和大公司的運維狀況對比,並能瞭解到各自的工作發展情況,其中會有一些例子來幫助理解。 因為內容比

口裡的JSON總結

JS裡 JSON.stringify(data);//轉成字串 JSON.parse(data);//轉成JSONObject eval('(' + mycars1 + ')');//轉成JSONArray 遍歷: for (var i = 0; i < infos.le