在接口中聲明的方法是否總是抽象?我們如何使用抽象類和接口實現多重繼承。這個實現與java的實現不同嗎?C#接口中的方法,抽象類
回答
是在接口中聲明的方法總是抽象的?
是的! C#接口只能包含抽象方法。
我們如何在接口中使用靜態方法。
我很確定你不能在接口中聲明靜態方法。即使你可以,也沒有必要這樣做。靜態方法可以在任何地方調用,對吧?那麼爲什麼你想把它們放入界面?把它們放在靜態類中!
我們如何使用抽象類和接口實現多重繼承。
我們不能。 C#不支持多繼承。一個班級只能從一個班級繼承只有!這是因爲C++中的多重繼承大大增加了代碼的複雜性。但類可以實現多個接口。我們只能用它們做多態性。
順便說一句,抽象類是一種類。
是那個java的
的這取決於你的意思執行做不同的實現。
如果你的意思是實現接口的方式,是的,它們差不多都是相同的*。如果你的意思是接口的語言實現,否則每種語言都是不同的。
*但是在C#中,您可以明確地實現一個接口。在Java中你不能。
編輯:
閱讀您的評論後,我知道你想展示一個繼承抽象類和接口的類的實例。幸運的是,我做了一個項目,它包含了這種東西!
很久以前我寫了一個俄羅斯方塊遊戲,這裏是它的基本模型。
我有一個TetrisBlock
類,它代表一個單一的Tetris塊。和代表一塊俄羅斯方塊的Tetrimino
類,例如
口
口口口
有很多種tetriminos的,所以Tetrimino
是一個抽象類。類如LShapedTetrimino
或TShapedTetrimino
繼承它。
然而,一些tetriminos可以旋轉,但有些卻不能,如
口口
口口
這樣可以旋轉的人實現了一個名爲IRotatable
的接口。
public interface IRotatable {
void Rotate();
}
如果您還不知道,接口實現是「可以用作」或「有能力」的關係。所以在這種情況下,一些tetriminos有旋轉的能力,但有些則不能。這就是爲什麼一些tetriminos實現界面,但有些不這樣做。
這一切都很完美,不是嗎?
「但是我可以將旋轉方法放在Tetrimino類中,爲什麼我需要一個界面呢?」你問。那麼IMO,C#是一種面向對象的語言,OOP的重點就是讓事情變得有意義!有時候讓代碼有意義是很好的。我曾經被這很多困惑。我認爲編寫代碼是關於實際的東西。但那不是全部。你也需要讓事情變得有意義。這就是OOP的要點。
是的,在接口中聲明的方法是抽象的。
一個接口只包含方法定義但不包含任何代碼。你需要實現界面中定義的所有方法。 抽象類是一個不能實例化但可以包含代碼的類。
一個類可能從多個接口繼承。但一個類可能只從一個抽象類繼承。
的多重繼承的概念主要是在C#中相同和Java
示例代碼
//ABSTRACT CLASS:
public abstract class Car
{
public abstract void Manufactured(); //abstract method
}
public class Honda : Car
{
public override void Manufactured()
{
Console.WriteLine("Honda is a Japanese car.");
}
}
public class Renult : Car
{
public override void Manufactured()
{
Console.WriteLine("Renault is a Franch car.");
}
}
//INTERFACE:
public interface IBike
{
void Manufactured();
}
public interface KBike
{
void Model();
}
public class Suzuki : IBike , KBike // multiple inheritance using interface
{
public void Manufactured()
{
Console.WriteLine("Suzuki is prodused on Japan.");
}
public void Model()
{
Console.WriteLine("Suzuki is prodused on Japan.");
}
}
樣品與接口和抽象類
public interface IWork
{
void func();
}
public abstract class WorkClass,IWork
{
public void func()
{
Console.WriteLine("Calling Abstract Class Function");
}}
public class MyClass:WorkClass{
...
}
我知道一個接口和一個抽象類是什麼。我想要使用抽象和接口的多重繼承的示例說明。 –
@AlexRumba看到我編輯的答案 – Sweeper
upvoted爲你。保持良好的工作。 –
爲什麼你想重載一個靜態方法?它甚至說靜態... 我一般會推薦你閱讀有關模式,你可能會找到解決你的問題的東西。
Btw。您可以在Java中進行默認實現:https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html – maxbit89
- 1. 可以省略C#中抽象類中的接口方法嗎?
- 2. C#接口和抽象類
- 3. 接口 - 實現抽象類方法
- 4. Java抽象類,接口,方法覆蓋
- 5. 抽象方法vs接口
- 6. 調用抽象類方法中的接口方法
- 7. 接口中的抽象類?
- 8. C#:抽象類中的抽象和非抽象方法?
- 9. C# - 接口/抽象類 - 確保事件引發的方法
- 10. C#類下面的接口,幷包含抽象方法
- 11. 抽象方法vs接口方法
- 12. 抽象類的抽象方法與java中接口的抽象方法的區別
- 13. c#接口,抽象類,強制繼承類不抽象類
- 14. 無法在接口方法中創建抽象類的實例
- 15. 抽象類(C#)中的部分方法
- 16. 抽象類,類,接口
- 17. C++:用抽象方法創建抽象類並重寫子類中的方法
- 18. PHP:接口內的抽象方法
- 19. 接口抽象的所有方法?
- 20. 接口和抽象方法的區別
- 21. 與抽象類的接口
- 22. c#抽象類實現接口
- 23. 接口和基本抽象類c#
- 24. C#接口繼承到抽象類
- 25. C#裝飾器 - 接口或抽象類?
- 26. 在抽象類中實現的方法,但出現在接口
- 27. 實現派生類接口方法的抽象基類
- 28. 爲什麼在接口中有抽象類和抽象變量/方法?
- 29. c中的抽象方法#
- 30. java中的接口中的抽象類
是 - 接口在設計上是抽象的。你不能提供實現和接口。 –
是的。在C#中你不能(但在其他.NET語言中是可能的)。去做就對了。當然是。 –
@AlexRumba如果你想看看我的項目如何實際使用一個抽象類和接口,下面是它的鏈接:https://github.com/Sweeper777/MineTris – Sweeper