java中如何调用dal接口案例_关于Java:接口的目的
好吧,我認為接口是一種強制對象實現一定數量功能的方法,而不必使用繼承。有點像合同。我半明白他們的意思。
但是,如果界面中的所有內容都是:
public interface animal{
void eat(object food);
}
它沒有這樣的實現,那么無論誰使用您的接口,每次都必須從頭開始編寫它。
如果您創建了許多類,所有這些類都實現了這些特性,并且實現只是略有不同,那么這將是一項非常艱巨的工作。
我很感激你幫我解決這個問題,因為我知道這很重要。
抱歉,我的"打字錯誤"太糟糕了,卡爾只是按了一下按鈕,沒有認真閱讀。在我的腦海里似乎有很多。當你看到錯誤的時候,你會覺得很有價值。
stackoverflow.com/a/24436493/1286942
接口是在Java中創建多重繼承的唯一方法。
假設您創建了一個類Animal。所有的動物,包括人類,都是如此。每一種動物都繼承了諸如吃、呼吸等常見的方法。
但是現在假設你有一個MathProblem類。您希望有一些類可以通過將問題傳遞給solve(MathProblem problem)方法來解決這個問題。你知道,一個Human,也可以一個Computer,可以解決這個數學問題。所以他們都需要能夠解決這個問題。你也許可以讓計算機擴展一些擁有這個方法的MathSolver類,但是人類已經擴展了動物,并且不能擴展其他任何東西。因此,一個更好的方法是使MathSolver成為一個接口,讓Human、Computer和任何其他需要解決問題的類都實現該接口。
還請注意,Human和Computer可能以完全不同的方式解決問題,因為它們的對象不同。這就是接口的最佳用途。定義跨越多個繼承層次結構的某些功能,這些功能可以有非常不同的實現,但都可以傳遞給接受它們中任何一個的方法。想想Comparable接口;它不是某類對象所擁有的東西,所有種類的東西都可以比較,而且通常以非常不同的方式。但是你總是可以調用一個List的Comparable對象的sort,因為你知道它們有一個特定的順序,不管它們是Numbers、Animals、Computers或其他什么(只要它們實現Comparable并定義它們的順序)。
+1-我認為重要的是要補充一點,繼承有兩個目的:(1)允許繼承的類對象代替基類對象;(2)允許繼承的類對象利用基類行為。接口對第二個目的不做任何有用的事情,但對第一個目的非常有用。
比起繼承,更喜歡組合。通過這種方式,您可以在一個類中實現(比如eat(),該類作為數據成員被合并到所有動物中。只寫一次,重用它,但不能以一種方式將一種功能顯式綁定到另一種功能。
如果你有兩種(或十種)不同的飲食方式,你可以根據需要把它們換掉。
雖然在這種特殊情況下,組合似乎是避免代碼復制的最好方法,但這種回答往往會讓人覺得接口在Java中是無用的。別忘了還有另一個設計原則說"程序到接口,而不是具體的類"。所以Java中的接口幾乎是任何地方都能理解和使用的東西。
好點。我只是編輯了一下添加了"換出"位,我想這可能會解決這個問題。謝謝。
您混淆了接口和繼承。它們是不同的概念,可以互相補充。如果所有EAT方法都只是略有不同,那么您可以創建一個包含公共代碼的基類,并通過添加不同部分的overriden方法從子類中調用它。基類仍然可以實現接口。希望是清楚的。
您應該將接口視為行為的權威聲明,它首先與實現問題無關。
如果您想避免代碼重復,那么可以結合使用接口使用抽象基類。在這里,您可以實現可能在所有接口實現類中重復的所有內容,否則。
H.T.BR/>托馬斯
一般化
使用Java接口,可以實現跨子類的泛化。泛化意味著這里的子類具有以不同方式實現的相同行為。
標準化
接口允許為實現它的所有子類設置標準化。它指定了子類必須具有的"什么",但不強制它應該具有的方式。
100%提取
接口主體提供100%的抽象,這樣子類就不會錯過抽象方法的任何實現。如果我們使用抽象類,這是不可能的。
去耦合(松耦合)
在開發應用程序時,與最終用戶交互的代碼可以通過使用接口松耦合到服務器[b l c]上運行的代碼。
多重繼承
通過使用接口,我們可以實現使用類不可能實現的MI。
還有舊線,我知道。但我剛剛讀到"接口是Java中創建多重繼承的唯一方法"。這是非常錯誤的,因為委托(或者卡爾所說的"復合")是獲得多重繼承的唯一方法(記住:"委托就是繼承",幾乎是這樣)。
您只需要接口來告訴開發人員"嘿,別忘了委托這個或那個類"!接口只需要作為正確委派的提醒(或者通常是:實現),但它們不能繼承任何代碼。使用多個繼承接口根本不需要。
實際上,您并不需要接口來創建一個工作程序,它們只是沒有任何功能或功能代碼的助手。順便說一句,托馬斯對抽象類的看法非常正確,這些抽象類遠比接口重要,因為這就是您可以從中獲得可重用代碼的地方。
通常,當我編寫Java應用程序時,我只在最后創建接口,作為未來程序員的助手。或者我根本不創建任何接口;d
接口不是幫助者。它們不是提醒開發人員實現方法的契約。接口將被編碼,這樣您就可以將特定的實現從需要功能的地方分離出來。
使用接口更多的是為使用代碼提供一種了解您期望從中得到什么的方法,而不是您需要關心使用代碼的細節。
例如,我們經常使用接口的方法之一就是在我們的業務層/數據訪問層中。
由于我們的業務層(BL)程序集將與數據訪問層(DAL)程序集直接通信,因此DAL無法與BL直接通信。如果DAL希望使用對象而不是單個字段,會發生什么?您必須定義自己的DAL對象,并使用剛剛收到的輸入對其進行水合物處理。基本上,更多的工作,更多的資源消耗,以及多個表示相同數據的對象,這使得維護成為一場噩夢。
但是,如果您在DAL中定義接口,您可以告訴DAL的消費者它期望什么。然后,您可以在BL中實現這些接口,并傳遞接口的實例,而不是BL對象。
接口都是抽象出實現的細節,而這些細節并非絕對必要的。
[編輯]如果有很多對象可以做類似的事情,那么使用可重寫/虛擬方法組合接口和基類可能比僅使用接口更有用。
If you are creating a number of classes all implementing such features and the implementation is only slightly different, this is going to be a lot of hard work.
在這種情況下,您可以很容易地在類的層次結構中創建另一個層,實現Animal,但對于以某種方式吃東西的所有動物來說,它是一個祖先類。
class Herbivore implements Animal {
public void eat(Object food) {
...
}
}
class Cow extends Herbivore..
class Horse extends Herbivore..
允許您使用super.eat()覆蓋eat,只更改小部分。
您應該同時期待代碼重用和組件封裝。然后,如果你的接口真的不能描述類本身,而僅僅是它的一個組件,你可以按照卡爾·馬納斯特的建議進行組合。
是的,您需要隨時實現它,但是您可以每次都不同地實現它,任何調用它的類都不需要擔心它是如何實現的。
例如,如果您有一個動物園對象,其中包含一組動物(new tiger()、lion()、bear()),那么您的動物園可以為某個集合a.eat()中的每一個動物a執行該操作,它將起作用。動物園不在乎有三種不同類型的動物以完全不同的方式進食。
一個主要原因是,您可以使用接口引用(類似于抽象方法)創建對象。當您這樣做時,每個實現接口的對象都可以分配給它。例如,如果狗和車都是可清洗的,那么您可以這樣做:
可清洗WD=new dog();
可洗廁所=新車();
如果washable具有public abstract方法wash(),則可以執行以下操作:
WD。
WC.WAW();
將調用它們各自的方法。這還意味著您可以接受一個接口作為方法的參數,這意味著您不必添加不必要的代碼來處理實現某個接口的每個類。
有關更詳細的解釋,請參閱此處:http://www.artima.com/objectsandjava/webuscrit/polymorphisminterfaces1.html
這并不是一個真正的答案,只是一個我認為在考慮接口時有用的例子,而是考慮需要該方法的接口Comparable。
public int compareTo(T anotherObject)
用戶可以隨心所欲地實現這一點。例如,如果一個Person implements Comparable,比較可以基于姓氏,然后是名字,忽略大寫。或者,它可以根據用戶想要的年齡等來決定。實現這個接口是非常有用的,因為它允許用戶使用像Collections.sort()這樣的東西,這些東西要求要排序的元素需要具有可比性(否則如何進行比較?)
你想得倒過來了。不是首先考慮實現,而是首先考慮行為(如方法簽名所描述)。然后在基類中實現適當的行為,從而提供更靈活、可擴展的系統。您很快就摒棄了"契約式設計",但它是一個關鍵的設計策略,也是Web服務、SOA等的基礎。
and it has no implementation as such
then whoever uses your interface has
to write it from scratch..every time.
接口的每個實現都可以是不同的。關鍵是您可以在不知道實現的情況下使用接口。舉個例子:
public interface ILogger
{
void WriteMessage(string message);
}
您的應用程序可以使用ILogger接口來記錄錯誤/調試信息等,但不管如何實現記錄器,它可以是FileSystemLogger或DatabaseLogger或任何其他實現。因此,您可以在任何時候替換實現,而不必更改提到日志記錄的代碼中的所有位置。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java中如何调用dal接口案例_关于Java:接口的目的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京环球影城朋友圈文案
- 下一篇: java底层 文件操作_JAVA的文件操