【问题标题】:Questions about Abstract method and interface method [duplicate]关于抽象方法和接口方法的问题[重复]
【发布时间】:2013-10-27 06:05:36
【问题描述】:

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

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

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

  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方法,两种方法都一样,差别不大

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

【问题讨论】:

  • 部分是什么意思?
  • 这已经被问过很多次了。因此,一个新问题必须更加具体。
  • 另外,“我们不能实现非抽象方法”并不是真的。
  • @HenkHolterman hmm 我们可以在父(抽象)类中部分实现非抽象方法,然后我们可以在子类中完全实现该方法,是否可以抽象方法?明白了吗?
  • csc.exe: MyMethod() 无法声明主体,因为它被标记为抽象。抽象(或 VB 中的 MustInherit)方法不能包含实现。 “部分”实现的方法,或使用相同的方法,可以标记为virtual,并在派生类中被重写,只要重写的方法调用基实现。

标签: c# .net interface abstract-class abstract-methods


【解决方案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 hiding

【讨论】:

  • 好的。好的 。现在请看我的问题!!!
  • +1 为您的口头解释
【解决方案2】:

终于我自己找到了答案。

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

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

【讨论】:

  • 您刚刚为您的问题提供了“抽象类和接口之间有什么区别”的答案,您声称这不是在问“抽象类和接口之间有什么区别?”一开始我给你写了几乎相同的词,你抱怨那不是你想要的。词穷了... :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2015-08-20
  • 2013-01-19
相关资源
最近更新 更多