[英]Abstraction Vs. Interface Confusion
等待,在您开始思考之前,我想澄清一下,我将不问接口和抽象之间的常规区别。
我经历了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)?
它们不会得到更新-您仍然必须为从WashingMachine
继承的每个类手动添加Rinse
的实现。
我相信MSDN所说的是,如果您在抽象类中定义了一个非抽象方法,并且更改了该方法,则从抽象类继承的所有类都将自动受益于该更改。
具体的派生类型都需要提供任何继承的抽象成员的实现...因此,在修改基础时,您的类型仍将需要提供Rinse实现。
http://msdn.microsoft.com/zh-CN/library/sf985hc5(v=vs.71).aspx
这是程序员通常在读取接口与抽象类之间的差异时所产生的困惑。 仅当抽象类中的更改是具体的时,您引用的行才为true。 我的意思是,您在实现中添加了属性或方法。 或者,如果我更具体,则对基本抽象类进行的任何更改都不会使任何具体的类抽象。 这种变化在抽象类中是可能的,并且您无法在接口中添加这种变化。
如何通过更改自动更新所有继承的类(即Philips / Samsung / Videocon)?
它们会突然变得不可编译,这不是更新吗?
但我想指出的是,实际上,抽象类中的抽象方法与接口中的方法之间没有区别。 主要区别在于以下事实:抽象类可以具有带有实现的方法,而接口不能具有。
实际上,我会说我不喜欢MSDN定义,并发现它令人困惑并且有些误导。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.