[英]Why can't I extend an interface “generic method” and narrow its type to my inherited interface “class generic”?
[英]Why can't an abstract class extend an interface?
我只是想知道為什么abstract
類不能擴展interface
。
由於我們無法實例化abstract
類,因此我不能只擴展接口然后在擴展抽象類的類中重寫那些方法嗎?
例如
abstract class AbstractClass extends InterfaceA
{
}
interface InterfaceA
{
public void methodToBeImplemented();
}
class MyClass extends AbstractClass
{
@Override
public void methodToBeImplemented(){
//do something
}
}
因為您不extends
接口 ,所以可以implements
它。
interface InterfaceA
{
public void methodToBeImplemented();
}
abstract class AbstractClass implements InterfaceA
{
}
class MyClass extends AbstractClass
{
@Override
public void methodToBeImplemented(){
//do something
}
}
就像其他類一樣,抽象類仍然是一個類。 只有接口可以extends
其他接口。
您實際上可以使用Java擴展接口,但仍將其稱為接口。
然后,您可以使用在抽象類中實現的擴展接口。
interface InterfaceName
{
public void foo();
}
public interface ExtendedInterface extends InterfaceName
{
public void bar();
}
public class ClassName implements ExtendedInteface
{
//implementation for all methods in InterfaceName and ExtendedInteface
...
}
Praveen,這只是設計師設計的方式。 它可以追溯到Java的哲學以及類和接口的使用方式。 假設您有以下課程:學生,教授,員工,技術人員。 以及以下界面:人口統計,詳細信息和個人詳細信息。
理想情況下,班級教授和技術人員都可以從班級雇員那里擴展出來,這很有意義。 但是,請想象從人口統計學或Personaldetails擴展類技術人員。 這沒有道理。 就像從藍色課堂擴展課堂天空一樣。 僅因為您可以做並不意味着您應該做。 但是,讓班級技術人員從員工中擴展並實現諸如Paydetails或人口統計學之類的接口更有意義。 就像從大自然中延伸出天空,但實現了藍色的界面(賦予它藍色的功能)。
這是Java開發人員反對多重繼承(與cpp不同)而使用接口的基本原因。 在您的問題中,該類是否抽象並不重要。 您不能簡單地從接口擴展,因為從邏輯上講它沒有意義。
in接口只擴展接口。當我們在類中使用接口時,它需要在類中實現。另一件事是抽象類同時包含抽象和非抽象方法,而接口僅包含定義inteface()實現位置的抽象方法。子類)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.