有关抽象方法和接口方法的问题
本文关键字:方法 问题 接口 抽象方法 | 更新日期: 2023-09-27 18:35:52
大家好,我对抽象类和接口有一些疑问
我不问接口和抽象类之间的区别。我只是问抽象方法和接口方法之间的区别
抽象方法与接口方法相同。我知道如果我们继承子类中的接口和抽象类,那么我们必须实现那些端方法。但是我们不能实现非抽象方法。所以
- 我的问题是抽象方法和接口有什么区别?
和
2".另一个问题是我们可以在抽象类中部分实现非抽象方法,是否可以在抽象类中部分实现抽象方法?
我也参考了很多网站,但没有一个给出第二个问题的解决方案
代码问题
这是我的抽象类,有一个抽象方法(xxx)和另一个非抽象moethod(yyy)和接口方法(xxx)
public abstract class AbstractRam
{
public abstract int xxx();// What is the difference in interface method ?
public int yyy()
{
return 2;
}
}
public interface InterfaceRam
{
int xxx();// What is the difference in abstract method ?
}
我在另一个班级中继承了两者
public class OrdinaryClass : AbstractRam
{
public OrdinaryClass()
{
//
// TODO: Add constructor logic here
//
}
public override int xxx()
{
return 1;
}
}
public class OrdinaryClass2 : InterfaceRam
{
public OrdinaryClass2()
{
//
// TODO: Add constructor logic here
//
}
public int xxx()
{
return 1;
}
}
让我们看看我的xxx方法,两种方法的工作方式相同,差别不大
问:它有什么区别吗?如果是相同的,那么哪一个是最好的方法?
-
接口方法是抽象方法。是的,它们与抽象类中的抽象方法相同,因为两者都是抽象的。这里需要注意的是,当多态性发挥作用时,如何处理它们。这可以用以下代码来说明:
interface IA { int xxx(); } abstract class B { public abstract int yyy(); } class C : B, IA { public int xxx() { return 1; } public int yyy() { return 1; } }
yyy
定义实际上隐藏了 B 中的抽象方法,需要声明为 public override int yyy()...
以防止这种情况。
-
不可以,你不能"在抽象类中部分实现非抽象方法"。您可以通过提供一些具体方法和一些抽象方法来部分实现抽象类。但是,您不能"部分实现"抽象方法。抽象类中的方法要么是抽象的,要么不是。
-
在您的代码示例中,
OrdinaryClass
提供了xxx
的实现。OrdinaryClass2
隐藏了抽象方法并提供自己的xxx
。如(1)所述。请阅读 C# 中的方法隐藏以获取更多详细信息,例如 http://www.akadia.com/services/dotnet_polymorphism.html 和覆盖与方法隐藏。
终于我自己找到了答案.
- 抽象方法和接口方法的最大区别是
我们可以在同一个抽象类的内部实现抽象方法,但我们不能在同一接口内部实现接口方法。