[英]Inheritance and Interface
當涉及接口時,我一直在嘗試理解繼承。 我想知道子類是如何創建的,如果它們遵循以下內容:
例如,假設我有:
我的問題
我是否必須在擴展A的所有子類中提供接口方法'q和r'的實現?
如果我不在子類中提供接口的實現,我是否必須使該子類成為抽象類?
任何子類都可以實現我嗎? 例如,C類擴展A實現I,這可能嗎? 即使它已經擴展了一個實現我的超類?
假設我沒有從接口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
是抽象的並且沒有提供方法的實現,那么B
和C
必須提供實現。
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.