第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

“程序到接口”。什么意思?

“程序到接口”。什么意思?

回首憶惘然 2019-08-02 07:02:30
“程序到接口”。什么意思?我經(jīng)常碰到這個(gè)詞:程序到接口。這到底是什么意思?一個(gè)真實(shí)的設(shè)計(jì)場(chǎng)景將是非常感謝的。
查看完整描述

3 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

簡(jiǎn)單地說,與其用這樣的方式編寫類,倒不如說

我依靠這具體上課來做我的工作

你用這樣的方式寫

我依靠任何類別那確實(shí)是這東西做我的工作。

第一個(gè)示例表示依賴于特定具體實(shí)現(xiàn)來完成其工作的類。從本質(zhì)上講,這并不是很靈活。

第二個(gè)示例表示寫入界面..它不關(guān)心你使用什么具體的對(duì)象,它只關(guān)心它實(shí)現(xiàn)了某些行為。這使得類更加靈活,因?yàn)榭梢詾樗峁┤我鈹?shù)量的具體實(shí)現(xiàn)來完成它的工作。

例如,特定的類可能需要執(zhí)行一些日志記錄。如果編寫依賴于TextFileLogger的類,則該類將永遠(yuǎn)被迫將其日志記錄寫入文本文件。如果要更改日志記錄的行為,則必須更改類本身。該類與其記錄器緊密耦合。

但是,如果編寫類依賴于ILogger接口,然后為類提供一個(gè)TextFileLogger,那么您將完成同樣的工作,但具有更靈活的額外好處。您可以隨意提供任何其他類型的ILogger,而無需更改類本身。類和它的記錄器現(xiàn)在是松散耦合的,您的類要靈活得多。




查看完整回答
反對(duì) 回復(fù) 2019-08-03
?
慕斯王

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊

接口是相關(guān)方法的集合,它只包含這些方法的簽名-而不是實(shí)際的實(shí)現(xiàn)。
如果一個(gè)類實(shí)現(xiàn)了一個(gè)接口(class Car implements IDrivable)它必須為接口中定義的所有簽名提供代碼。

基本例子:
你必須上汽車和自行車課。兩者都實(shí)現(xiàn)了IDriable接口:

interface IDrivable {
    void accelerate();
    void brake();      }

class Car implements IDrivable {
   void accelerate()
   { System.out.println("Vroom"); }

   void brake()
   { System.out.println("Queeeeek");}}

class Bike implements IDrivable {
   void accelerate()
   { System.out.println("Rattle, Rattle, ..."); }

   void brake()
   { System.out.println("..."); }}

現(xiàn)在假設(shè)您有一個(gè)對(duì)象集合,這些對(duì)象都是“可驅(qū)動(dòng)的”(它們的類都實(shí)現(xiàn)了IDriable):

List<IDrivable> vehicleList = new ArrayList<IDrivable>();list.add(new Car());list.add(new Car());list.add(new Bike());list.add(new Car());list.add(new Bike());list.add(new Bike());

如果您現(xiàn)在希望遍歷該集合,則可以依賴于以下事實(shí):該集合中的每個(gè)對(duì)象都實(shí)現(xiàn)了。accelerate():

for(IDrivable vehicle: vehicleList) {
  vehicle.accelerate(); //this could be a bike or a car, or anything that implements IDrivable}

通過調(diào)用該接口方法,您不是對(duì)實(shí)現(xiàn)進(jìn)行編程,而是對(duì)接口進(jìn)行編程-這是一個(gè)確保調(diào)用目標(biāo)實(shí)現(xiàn)特定功能的契約。
使用繼承可以實(shí)現(xiàn)相同的行為,但是從公共基類派生會(huì)導(dǎo)致緊密耦合,可以使用接口避免這種耦合。




查看完整回答
反對(duì) 回復(fù) 2019-08-03
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

現(xiàn)實(shí)世界的例子是適用的。其中之一:

對(duì)于jdbc,您使用的是java.sql.Connection..但是,每個(gè)JDBC驅(qū)動(dòng)程序都提供了自己的Connection..您不需要知道任何關(guān)于特定實(shí)現(xiàn)的信息,因?yàn)?/trans>符合Connection接口。

另一個(gè)來自Java集合框架。有一個(gè)java.util.Collection接口,它定義了sizeaddremove方法(包括許多其他方法)。所以您可以使用所有類型的集合。互換性..假設(shè)您有以下內(nèi)容:

public float calculateCoefficient(Collection collection) {
    return collection.size() * something / somethingElse;}

還有另外兩種調(diào)用這個(gè)方法的方法。其他方法之一使用LinkedList因?yàn)樗鼘?duì)其用途更有效,而另一個(gè)則使用TreeSet.

因?yàn)閮蓚€(gè)LinkedListTreeSet實(shí)現(xiàn)Collection接口時(shí),只能使用一種方法來執(zhí)行系數(shù)計(jì)算。不需要重復(fù)你的代碼。

接下來是“程序到接口”-您不關(guān)心size()方法實(shí)現(xiàn),您知道它應(yīng)該返回集合的大小-即,您已將其編程到Collection接口,而不是LinkedListTreeSet特別是。

但我的建議是找到一本閱讀-也許是一本書(例如,“Java中的思考”)-在這本書中詳細(xì)解釋這個(gè)概念。




查看完整回答
反對(duì) 回復(fù) 2019-08-03
  • 3 回答
  • 0 關(guān)注
  • 407 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)