Java C#接口、抽象类中的方法
接口中声明的方法总是抽象的吗?我们如何使用抽象类和接口实现多重继承。实现是否不同于java?是的,接口中声明的方法是抽象的 接口只包含方法定义,但不包含任何代码。您需要实现接口中定义的所有方法。 抽象类是不能实例化但可以包含代码的类 一个类可以从多个接口继承。但是一个类只能从一个抽象类继承 多重继承的概念在C#和Java中基本相同 示例代码Java C#接口、抽象类中的方法,java,c#,interface,abstract-class,Java,C#,Interface,Abstract Class,接口中声明的方法总是抽象的吗?我们如何使用抽象类和接口实现多重继承。实现是否不同于java?是的,接口中声明的方法是抽象的 接口只包含方法定义,但不包含任何代码。您需要实现接口中定义的所有方法。 抽象类是不能实例化但可以包含代码的类 一个类可以从多个接口继承。但是一个类只能从一个抽象类继承 多重继承的概念在C#和Java中基本相同 示例代码 //ABSTRACT CLASS: public abstract class Car { public abstract void Manufac
//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{
...
}
接口中声明的方法总是抽象的吗
对!!C#接口只能包含抽象方法
我们如何在接口中使用静态方法
我很确定不能在接口中声明静态方法。即使你可以,这样做也没有意义。静态方法可以在任何地方调用,对吗?那么,为什么要将它们放在一个接口中呢?将它们放在一个静态类中
如何使用抽象类和接口实现多重继承
我们不能。C#不支持多重继承。一个类只能从一个类继承!这是因为C++中的多重继承极大地增加了代码的复杂性。但是类可以实现多个接口。我们只能和他们一起做
顺便说一句,抽象类是类的一种
实现是否与java不同
这取决于您所说的实现是什么意思
如果你指的是实现接口的方式,是的,它们几乎(如果不是全部的话)是相同的*。如果你指的是接口的语言实现,不,每种语言都是不同的
*然而,在C#中,您可以显式地实现接口。在Java中,你不能
编辑:
在阅读了您的评论之后,我知道您需要一个示例来显示继承抽象类和接口的类。幸运的是,我做了一个项目,它包含了这种东西
很久以前我写过一个俄罗斯方块游戏,下面是它的基本模型
我有一个表示单个俄罗斯方块的TetrisBlock
类。以及表示俄罗斯方块块的Tetrimino
类,例如
口
口口口
Tetrimino有很多种,因此Tetrimino
是一个抽象类。类,如lshapedtrimino
或tshapedtrimino
继承自它
然而,有些破伤风可以旋转,但有些不能,例如
口口
口口
因此,可以旋转的实现了一个名为IRotatable
的接口
public interface IRotatable {
void Rotate ();
}
如果您还不知道,接口实现是“可以用作”或“有能力”关系。因此,在这种情况下,有些破伤风具有旋转能力,但有些没有。这就是为什么有些tetriminos实现了接口,而有些没有
这一切都很有道理,不是吗
“但是我可以把rotate方法放在Tetrimino类中,为什么我需要一个接口呢?”你问道。嗯,在我看来,C#是一种面向对象的语言,OOP的全部目的就是让事情变得有意义!有时候,让你的代码有意义是件好事。我以前对此很困惑。我认为写代码就是为了实用。但这并不是全部。你还需要让事情变得有意义。这就是OOP的全部要点。为什么要重写静态方法?它甚至说是静态的。。。
我通常会建议您阅读关于模式的内容,您可能会在那里找到解决问题的方法。是的-接口是通过抽象设计实现的。您不能为实现提供和接口。是。在C#中,您不能(但在其他.NET语言中,这是可能的)。想做就做是的,当然。@AlexRumba如果你想知道我的项目是如何实际使用抽象类和接口的,这里是它的链接:我知道什么是接口和抽象类。我想要一个使用抽象和接口的多重继承的示例说明。@AlexRumba请看我编辑的答案。再接再厉。您可以使用Java进行默认实现: