-1

大家好,我对抽象类和接口有一些疑问

我不是在问接口和抽象类之间的区别。我只是询问抽象方法和接口方法之间的区别

抽象方法与接口方法相同。我知道如果我们在子类中继承接口和抽象类,那么我们必须实现那些侧面方法。但是我们不能实现非抽象方法。所以

  1. 我的问题是抽象方法和接口有什么区别?

2”。另一个问题是我们可以在抽象类中部分实现非抽象方法,是否可以在抽象类中部分实现抽象方法?

我也提到了很多网站,但没有一个给出第二个问题的解决方案

带代码的问题

这是我的抽象类,有一个抽象方法(xxx)和另一个非抽象方法(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方法,两种方法都一样,差别不大

问题:有什么区别吗?如果是一样的,那么哪一个是最好的方法?

4

2 回答 2

1
  1. 接口方法是抽象方法。是的,它们与抽象类中的抽象方法相同,因为两者都是抽象的。不过这里需要注意的是,当多态性发挥作用时,它们是如何处理的。这可以用以下代码来说明:

    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()...防止这种情况发生。

  1. 不,您不能“在抽象类中部分实现非抽象方法”。您可以通过提供一些具体方法和一些抽象方法来部分实现一个抽象类。但是,您不能“部分实现”抽象方法。抽象类中的方法要么是抽象的,要么不是。

  2. 在您的代码示例中,OrdinaryClass提供xxx. OrdinaryClass2虽然隐藏了该抽象方法并提供了自己的xxx. 如(1)所述。请阅读 C# 中的方法隐藏以获取更多详细信息,例如http://www.akadia.com/services/dotnet_polymorphism.htmlOverriding vs method hide

于 2013-10-18T12:12:21.037 回答
-1

最后我自己找到了答案。

  • 抽象方法和接口方法的最大区别是

我们可以在同一个抽象类内部实现抽象方法,但不能在同一个接口内部实现接口方法。

于 2013-10-18T13:02:22.453 回答