HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    接口中可以包含已實現(xiàn)的方法(接口可以包含已經(jīng)實現(xiàn)的方法)

    發(fā)布時間:2023-03-19 02:55:08     稿源: 創(chuàng)意嶺    閱讀: 143        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于接口中可以包含已實現(xiàn)的方法的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com

    本文目錄:

    接口中可以包含已實現(xiàn)的方法(接口可以包含已經(jīng)實現(xiàn)的方法)

    一、java:一個類實現(xiàn)某個接口的時候可不可以只實現(xiàn)這個接口中的部分方法,還是必須實現(xiàn)接口中的全部方法呢

    不可以,如果一個類要實現(xiàn)一個接口那么它必須實現(xiàn)該接口中所有的方法,否則只能繼承,這個類也只能是一個抽象類

    二、抽象類實現(xiàn)了接口,為什么可以實現(xiàn)接口中的方法?(抽象類中不是不可以實現(xiàn)方法的?。?/strong>

    含有抽象方法的必須是抽象類,但是抽象類里面不一定全部是抽象方法,也就是說抽象類里面可以有普通方法,所以抽象類實現(xiàn)接口后就可以也必須實現(xiàn)接口里面的方法

    你上面這個例子用到了適配器設計模式,有空的話你也可以看看設計模式的相關內容

    三、對象可以直接調用已實現(xiàn)的接口里面的方法嗎

    你也可以這么用,不過這種做法只為了松耦。用于 spring 里會居多些,你不想用這些實現(xiàn),你可以自定義實現(xiàn),只要實現(xiàn)它的接口,就可以拿來用。

    四、如何在Java類中定義接口屬性并如何使用接口的方法

    摘要

    一, 接口基礎知識

    1, java語言不支持一個類有多個直接的父類(多繼承),但可以實現(xiàn)(implements)多個接口,間接的實現(xiàn)了多繼承.

    2, 與接口相關的設計模式:

    1, 定制服務模式

    設計精粒度的接口,每個接口代表相關的一組服務,通過繼承來創(chuàng)建復合接口

    2, 適配器模式

    當每個系統(tǒng)之間接口不匹配時,用適配器來轉換接口

    3, 默認適配器模式

    為接口提供簡單的默認實現(xiàn)

    4, 代理模式

    為接口的實現(xiàn)類創(chuàng)建代理類,使用者通過代理來獲得實現(xiàn)類的服務

    5, 標識類型模式

    用接口來標識一種沒有任何行為的抽象類型

    6, 常量接口模式

    在接口中定義靜態(tài)常量,在其它類中通過import static語句引入這些常量

    3, 接口的特征歸納:

    1, 接口中的成員變量默認都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用"_"分隔)

    2, 接口中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化

    public interface A

    {

    int CONST = 1; //合法,CONST默認為public,static,final類型

    void method(); //合法,method()默認為public,abstract類型

    public abstract void method2(); //method2()顯示聲明為public,abstract類型

    }

    3, 接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法

    public interface A

    {

    int var; //錯,var是常量,必須顯示初始化

    void method(){...}; //錯,接口中只能包含抽象方法

    protected void method2(); //錯,接口中的方法必須是public類型

    static void method3(){...}; //錯,接口中不能包含靜態(tài)方法

    }

    4, 接口中沒有構造方法,不能被實例化

    public interface A

    {

    public A(){...}; //錯,接口中不能包含構造方法

    void method();

    }

    5, 一個接口不能實現(xiàn)(implements)另一個接口,但它可以繼承多個其它的接口

    public interface A

    {

    void methodA();

    }

    public interface B

    {

    void methodB();

    }

    public interface C extends A, B //C稱為復合接口

    {

    void methodC();

    }

    public interface C implements A{...} //錯

    6, 接口必須通過類來實現(xiàn)它的抽象方法

    public class A implements B{...}

    7, 當類實現(xiàn)了某個接口時,它必須實現(xiàn)接口中的所有抽象方法,否則這個類必須聲明為抽象的

    8, 不允許創(chuàng)建接口的實例(實例化),但允許定義接口類型的引用變量,該引用變量引用實現(xiàn)了這個接口的類的實例

    public class B implements A{}

    A a = new B(); //引用變量a被定義為A接口類型,引用了B實例

    A a = new A(); //錯誤,接口不允許實例化

    9, 一個類只能繼承一個直接的父類,但可以實現(xiàn)多個接口,間接的實現(xiàn)了多繼承.

    public class A extends B implements C, D{...} //B為class,C,D為interface

    4, 通過接口,可以方便地對已經(jīng)存在的系統(tǒng)進行自下而上的抽象,對于任意兩個類,不管它們是否屬于同一個父類,只有它

    們存在相同的功能,就能從中抽象出一個接口類型.對于已經(jīng)存在的繼承樹,可以方便的從類中抽象出新的接口,但從類

    中抽象出新的抽象類卻不那么容易,因此接口更有利于軟件系統(tǒng)的維護與重構.對于兩個系統(tǒng),通過接口交互比通過抽象

    類交互能獲得更好的松耦合.

    5, 接口是構建松耦合軟件系統(tǒng)的重要法寶,由于接口用于描述系統(tǒng)對外提供的所有服務,因此接口中的成員變量和方法都

    必須是public類型的,確保外部使用者能訪問它們,接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所有接口中的方法

    都是抽象方法,接口不涉及和任何具體實例相關的細節(jié),因此接口沒有構造方法,不能被實例化,沒有實例變量.二, 比較抽象類與接口

    1, 抽象類與接口都位于繼承樹的上層

    相同點

    1, 代表系統(tǒng)的抽象層,當一個系統(tǒng)使用一顆繼承樹上的類時,應該盡量把引用變量聲明為繼承樹的上層抽象類型,

    這樣可以提高兩個系統(tǒng)之間的送耦合

    2, 都不能被實例化

    3, 都包含抽象方法,這些抽象方法用于描述系統(tǒng)能提供哪些服務,但不提供具體的實現(xiàn)

    不同點:

    1, 在抽象類中可以為部分方法提供默認的實現(xiàn),從而避免在子類中重復實現(xiàn)它們,這是抽象類的優(yōu)勢,但這一優(yōu)勢

    限制了多繼承,而接口中只能包含抽象方法.

    由于在抽象類中允許加入具體方法,因此擴展抽象類的功能,即向抽象類中添加具體方法,不會對它的子類造

    成影響,而對于接口,一旦接口被公布,就必須非常穩(wěn)定,因為隨意在接口中添加抽象方法,會影響到所有的實

    現(xiàn)類,這些實現(xiàn)類要么實現(xiàn)新增的抽象方法,要么聲明為抽象類

    2, 一個類只能繼承一個直接的父類,這個父類可能是抽象類,但一個類可以實現(xiàn)多個接口,這是接口的優(yōu)勢,但這

    一優(yōu)勢是以不允許為任何方法提供實現(xiàn)作為代價的三, 為什么Java語言不允許多重繼承呢?

    當子類覆蓋父類的實例方法或隱藏父類的成員變量及靜態(tài)方法時,Java虛擬機采用不同的綁定規(guī)則,假如還允許

    一個類有多個直接的父類,那么會使綁定規(guī)則更加復雜,因此,為了簡化系統(tǒng)結構設計和動態(tài)綁定機制,Java語言

    禁止多重繼承.

    而接口中只有抽象方法,沒有實例變量和靜態(tài)方法,只有接口的實現(xiàn)類才會實現(xiàn)接口的抽象方法(接口中的抽象方

    法是通過類來實現(xiàn)的),因此,一個類即使有多個接口,也不會增加Java虛擬機進行動態(tài)綁定的復雜度.因為Java虛

    擬機永遠不會把方法與接口綁定,而只會把方法與它的實現(xiàn)類綁定.四, 使用接口和抽象類的總體原則:

    1, 用接口作為系統(tǒng)與外界交互的窗口

    站在外界使用者(另一個系統(tǒng))的角度,接口向使用者承諾系統(tǒng)能提供哪些服務,站在系統(tǒng)本身的角度,接口制定

    系統(tǒng)必須實現(xiàn)哪些服務,接口是系統(tǒng)中最高層次的抽象類型.通過接口交互可以提高兩個系統(tǒng)之間的送耦合

    系統(tǒng)A通過系統(tǒng)B進行交互,是指系統(tǒng)A訪問系統(tǒng)B時,

    把引用變量聲明為系統(tǒng)B中的接口類型,該引用變量引用系統(tǒng)B中接口的實現(xiàn)類的實例.

    public interface B

    {

    }

    public class C implements B

    {

    }

    public class A

    {

    }

    B a = new C();

    2, 接口本身必須非常穩(wěn)定,接口一旦制定,就不允許隨遇更加,否則對外面使用者及系統(tǒng)本身造成影響

    3, 用抽象類來定制系統(tǒng)中的擴展點

    抽象類來完成部分實現(xiàn),還要一些功能通過它的子類來實現(xiàn) 2008/1/9

    一, Java多態(tài)機制中的綁定規(guī)則深入剖析

    class Base

    {

    String var = "BaseVar"; //實例變量

    static String staticVar = "StaticBaseVar"; //靜態(tài)變量 void method() //實例方法

    {

    System.out.println("Base method");

    } static void staticMethod() //靜態(tài)方法

    {

    System.out.println("Static Base method");

    }

    }public class Sub extends Base

    {

    String var = "SubVar"; //實例變量

    static String staticVar = "StaticSubVar"; //靜態(tài)變量

    void method() //隱藏父類的method()方法

    {

    System.out.println("Sub method");

    } static void staticMethod() //隱藏父類的staticMethod()方法

    {

    System.out.println("Static Sub method");

    } String subVar = "Var only belonging to Sub"; void subMethod()

    {

    System.out.println("method only belonging to Sub");

    } public static void main(String args[])

    {

    //引用變量who被聲明為Base類型,引用Sub類的實例

    Base who = new Sub();

    //成員變量(靜態(tài)變量,實例變量)與引用變量所聲明的類型(Base類型)的成員變量綁定

    System.out.println("who.var = "+who.var); //所以,打印Base類的var變量

    System.out.println("who.staticVar = "+who.staticVar); //所以,打印Base類的staticVar變量 //實例方法與引用變量實際引用的對象(Sub對象)的方法綁定

    who.method(); //所以,打印Sub實例的method()方法 //靜態(tài)方法與引用變量所聲明的類型(Base類型)的方法綁定

    who.staticMethod(); //所以,打印Base類的staticMethod()方法

    }

    }

    【分析過程】

    1, 對于一個引用類型的變量,Java編譯器按照它聲明的類型來處理.

    例如在以下代碼中,編譯器認為who是Base類型的引用變量,不存在subVar成員變量喝subMethod()方法,編譯報錯

    Base who = new Sub(); //引用變量who被聲明為Base類型,引用Sub類的實例

    who.subVar = "123"; //編譯錯,在Base類中沒有subVar屬性

    who.subMethod(); //編譯錯,在Base類中沒有submethod()方法

    如果要訪問Sub類的成員,必須通過強制類型轉換:

    Base who = new Sub();

    //把Base引用類型的who成員變量強制轉換為Sub引用類型

    //把引用變量轉換為子類的類型稱為向下轉型,把引用變量轉換為父類的類型稱為向上轉型

    ((Sub)who).subVar = "123";

    ((Sub)who).subMethod();

    Java編譯器允許在具有直接或間接繼承關系的類之間進行類型轉換,對于向上轉型,Java編譯器會自動進行,對于

    向下轉型,需要進行強制類型轉換

    如果兩種類型之間沒有繼續(xù)關系,即不在繼承樹的同一個繼承分支上,那么Java編譯器不允許進行類型轉換

    2, 對于一個引用類型的變量,運行時Java虛擬機按照它實際引用的對象來處理

    例如以下代碼雖編譯可通過,但運行時會拋出ClassCastException運行時異常

    Base who = new Base(); //who引用Base類的實例

    Sub s = (Sub)who; //運行時會拋出ClassCastException

    在運行時,子類的對象可以轉換為父類類型,而父類的對象實際上無法轉換為子類類型

    3, 在運行時環(huán)境中,通過引用類型變量來訪問所引用對象的方法和屬性時,Java虛擬機采用以下綁定規(guī)則:

    1, 實例方法與引用變量實際引用的對象的方法綁定,這種綁定屬于動態(tài)綁定,因為是在運行時由Java虛擬機

    動態(tài)決定的

    2, 靜態(tài)方法與引用變量所聲明的類型的方法綁定,這種綁定屬于靜態(tài)綁定,因為實際上是在編譯階段就已經(jīng)

    綁定

    3, 成員變量(靜態(tài)變量,實例變量)與引用變量所聲明的類型的成員變量綁定,這種綁定屬于靜態(tài)綁定,因為

    實際上是在編譯階段就已經(jīng)綁定

    以上就是關于接口中可以包含已實現(xiàn)的方法相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。


    推薦閱讀:

    聚合支付接口平臺(聚合支付接口平臺是什么)

    聚合支付api(聚合支付api接口多少錢)

    國際短信驗證碼平臺(國際短信驗證碼平臺接口怎么調用)

    浙江寧波魚池景觀設計(寧波魚池科技)

    20萬左右汽車排行榜(20萬左右汽車排行榜2022前十名)

      提交需求1對1免費咨詢

      填寫需求或發(fā)送郵件至:ving7@vip.qq.com
      也可以直接撥打總監(jiān)電話:400 6363 321

      *

      *

      品牌設計
      卡通形象設計
      商標注冊
      包裝設計
      物料設計
      電商設計
      品牌策劃
      空間設計
      SEO優(yōu)化
      直播帶貨
      代運營服務