0

等等,在你开始思考之前,我想明确一点,我不会问接口和抽象之间的常规区别。

我已经了解了MSDN中 Abstract 和 Interface 之间的区别。

据说 :

通过更新基类,所有继承类都会随着更改而自动更新。
另一方面,接口一旦创建就不能更改。如果需要新版本的接口,则必须创建一个全新的接口。

看到这个: - 抽象和接口之间的区别

任何人都可以使用以下示例证明这一点:-

abstract class WashingMachine
{
   abstract public void Wash();
}


class Philips : WashingMachine
{
   public Philips() {  }

   override public void Wash(){//Wash code here....}
}

class Samsung : WashingMachine
{
   public Samsung() {  }

   override public void Wash(){//Wash code here....}
}

class Videocon : WashingMachine
{
   public Videocon() {  }

   override public void Wash(){//Wash code here....}
}

现在,如果我在WashingMachine中添加了以下新的抽象方法:-

abstract public void Rinse(int loadSize);

所有继承类(即 Philips/Samsung/Videocon)将如何随着更改自动更新?

4

4 回答 4

3

它们不会得到更新 - 您仍然必须手动Rinse每个继承自WashingMachine.

我相信 MSDN 说的是,如果您在抽象类中定义了一个非抽象方法并且您更改了该方法,那么从抽象类继承的所有类都将自动受益于更改。

于 2012-07-28T11:10:11.540 回答
0

您的具体派生类型都需要提供任何继承的抽象成员的实现......因此,当您修改基础时,您的类型仍然需要提供 Rinse 实现。

http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx

于 2012-07-28T11:09:08.803 回答
0

这是程序员在读取接口和抽象类之间的差异时通常会遇到的困惑。仅当抽象类中的更改是具体的时,您所指的行才是正确的。我的意思是你添加了一个带有实现的属性或方法。或者,如果我更具体一点,基本抽象类的任何更改都不会使任何具体类抽象。这种变化在抽象类中是可能的,你无法在接口中添加这种变化。

于 2012-07-28T11:13:36.187 回答
0

所有继承类(即 Philips/Samsung/Videocon)将如何随着更改自动更新?

它们会突然变得不可编译,这不是更新吗?

但我想指出,实际上抽象类中的抽象方法和接口中的方法没有区别。主要区别在于抽象类可以具有实现的方法,而接口则不能。

事实上,我会说我不喜欢 MSDN 的定义,并且觉得它令人困惑且有些误导。

于 2012-07-28T11:18:32.850 回答