簡體   English   中英

繼承和接口

[英]Inheritance and Interface

當涉及接口時,我一直在嘗試理解繼承。 我想知道子類是如何創建的,如果它們遵循以下內容:

例如,假設我有:

  1. 一個實現接口I的超類
  2. 和一對擴展超類A的子類

我的問題

  1. 我是否必須在擴展A的所有子類中提供接口方法'q和r'的實現?

  2. 如果我不在子類中提供接口的實現,我是否必須使該子類成為抽象類?

  3. 任何子類都可以實現我嗎? 例如,C類擴展A實現I,這可能嗎? 即使它已經擴展了一個實現我的超類?

  4. 假設我沒有從接口I提供方法r的實現,那么我將不得不制作超類A和抽象類! 那是對的嗎?

我的示例代碼:

    //superclass
    public class A implements I{
    x(){System.out.println("superclass x");}
    y(){System.out.println("superclass y");}
    q(){System.out.println("interface method q");}
    r(){System.out.println("interface method r");}
    }

    //Interface
    public Interface I{
    public void q();
    public void r();
    }

    //subclass 1
    public class B extends A{
    //will i have to implement the method q and r?
    x(){System.out.println("called method x in B");}
    y(){System.out.println("called method y in B");}
    }

    //subclass 2
    public class C extends A{
    //will i have to implement the method q and r?
    x(){System.out.println("called method x in C");}
    y(){System.out.println("called method y in C");}
}

1)不,您不需要在子類中實現這些方法,因為它們已經在超類中定義。 子類將繼承那些方法定義。

2)不,請參閱1.唯一的例外是如果超類是抽象的並且沒有實現接口,那么如果子類不是抽象的,則需要在子類中實現它。

3)不可以。它可以正確編譯,但不起作用,所以不應該這樣做。

4)是的,這是正確的。 如果未從接口實現方法,則需要使類成為抽象。

只有抽象類可以使它們保持抽象,這意味着不需要抽象類來為接口中的方法提供實現。

因為A是具體的,它必須提供實現。 然后A的子類將從A繼承這些實現。

但是,如果A是抽象的並且沒有提供方法的實現,那么BC必須提供實現。

1:不,如果您在超類中實現它們,則不需要在子類中實現它們

2:如果你沒有實現超類中的方法,那么你必須將它抽象為抽象,然后使你的具體子類實現這些方法

3:是的,但絕對多余,因為你的超類已經在實現thrm。

4:是的,你應該在擴展你的超類時在類中實現這些方法

界面是對外界的承諾,“我可以提供這些方法”。

1)和2)和4)由於超類A已經實現了接口I,它已經向外界承諾了。 超級A可以通過以下方式實現這一承諾:

  • 實現該方法 - 在這種情況下,您的子類已經繼承了該方法,並且不需要實現任何東西。
  • 聲明自己是抽象的 - 在這種情況下,您的子類必須實現抽象方法,或者聲明自己也是抽象的,並“向下傳遞”到任何擴展子類的類。

3)超類A的所有子類已經實現了I,因為它們繼承了“promise”,所以C類擴展了A實現我是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM