等等,在你开始思考之前,我想清楚我不要问接口和抽象之间的例行差异。
我在MSDN中完成了抽象和界面之间的区别。
据说:
通过更新基类,所有继承类都会随着更改自动更新。
另一方面,接口在创建后无法更改。如果是新版本的 需要一个接口,您必须创建一个全新的界面。
看到这个: -
任何人都可以使用以下示例证明这一点: -
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);
所有继承类(即飞利浦/三星/ Videocon)如何 自动 如何更新更新?
答案 0 :(得分:3)
它们不会得到更新 - 您仍然必须手动向从Rinse
继承的每个类添加WashingMachine
的实现。
我认为MSDN所说的是,如果你在抽象类中定义了非抽象方法并且你改变了那个方法,那么从抽象类继承的所有类都将从这个变化中受益自动。
答案 1 :(得分:0)
您的具体派生类型都需要提供任何继承的抽象成员的实现...因此,当您修改基础时,您的类型仍需要提供Rinse实现。
http://msdn.microsoft.com/en-us/library/sf985hc5(v=vs.71).aspx
答案 2 :(得分:0)
这是一个混淆程序员通常在读取接口和抽象类之间的差异时得到的。如果抽象类的更改是具体的,那么您引用的行才是真的。我的意思是你添加了一个属性或方法与实现。或者,如果我更具体,基本抽象类中的任何更改都不会使任何具体类抽象。这种更改在抽象类中是可能的,并且您无法在界面中添加此类更改。
答案 3 :(得分:0)
所有继承类(即飞利浦/三星/ Videocon)如何自动更新更新?
它们会突然变得不可编译,这不是更新吗?
但是我想指出,抽象类中的抽象方法和接口中的方法实际上没有区别。主要区别在于抽象类可以包含实现方法,而接口则不能。
事实上,我会说我不喜欢MSDN的定义,并且发现它令人困惑并且有些误导。