Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 试图在asp.net中获得抽象类与接口的真实概念_Oop_Interface_Abstract Class - Fatal编程技术网

Oop 试图在asp.net中获得抽象类与接口的真实概念

Oop 试图在asp.net中获得抽象类与接口的真实概念,oop,interface,abstract-class,Oop,Interface,Abstract Class,我已经搜索了大量S/O帖子,但没有找到对我有帮助的答案。 我想了解一下什么是抽象类,什么是接口。我已经看完了这篇文章,但我仍然不清楚其中的概念 我希望有人能以“人”的形式来描述现实世界。 所以继承将是“个人”-->“员工”-->“经理” 最重要的是“员工工资”将变成“销售员工佣金” 如何在Person-object概念中描述抽象类和接口?关于使用接口和抽象类的问题,有不同的观点。不过,接口应该表示对象的行为(它可以做什么),抽象类应该定义它是什么。从物体的角度来看,基本上是“我能”和“我是” 所

我已经搜索了大量S/O帖子,但没有找到对我有帮助的答案。
我想了解一下什么是抽象类,什么是接口。我已经看完了这篇文章,但我仍然不清楚其中的概念

我希望有人能以“人”的形式来描述现实世界。 所以继承将是“个人”-->“员工”-->“经理”
最重要的是“员工工资”将变成“销售员工佣金”


如何在Person-object概念中描述抽象类和接口?

关于使用接口和抽象类的问题,有不同的观点。不过,接口应该表示对象的行为(它可以做什么),抽象类应该定义它是什么。从物体的角度来看,基本上是“我能”和“我是”

所以,如果我们有一个人,那是一个名词,所以我们将使用一个抽象类来定义它。任何“是”人的东西都将从该类继承。如果我们想定义一些行为来描述一个人能够做出的一些行为,而这些行为并没有扩展到所有人,那么我们应该将其放入一个接口中


使用您定义的关系(Person->Employee->Manager),我们可以说Employee实现了IFirable,而Manager实现了IFirer。员工可以被解雇,经理也可以解雇员工。

很抱歉,我没有使用您的个人示例,请将此作为扩展评论

我发现向没有编程背景的人解释这些概念最容易,用一个大多数人已经理解的类比:塑料成型

比如说,我们正在制作塑料水果:

界面就像模具,它有最终产品的形状,但你可以用各种不同的颜色和材料填充它。它们最终都会有相同的形状,即使它们在颜色和纹理上完全不同

抽象类更像是需要额外步骤的东西,比如绘画。你制作了一个基本的塑料水果,然后把它送去粘一些画或毛皮之类的东西

未完成的成果就像一个抽象类,它比模具对最终产品有更多的定义,但它本身并不完整。它需要更多的工作来完成,最终产品可以是完全不同的颜色,但它们基本上还是一样的


我希望这有帮助

好的,让我们看看我是否理解你的问题

我认为您在概念上不确定使用接口和抽象类之间的区别和/或相似性。如果这就是问题所在,那么这就是我的“10人入门”总结

抽象类不能实例化但可以包含实现细节,因此从一个类派生类时,您将得到契约和您在抽象类中放置的任何默认行为。例如,您的Person类(在本例中我假设它是一个抽象类)将定义派生的Employee或Manager类必须(至少)具有的契约,但也可以提供一些默认行为

另一方面,接口只指定合同
;实现类必须做什么,它们不能提供任何实现方式。例如,如果示例中的“Person”实际上是一个接口,那么它将定义实现它的类(雇员和经理)必须执行的操作,但不能为该合同提供任何默认实现


还请注意,在许多语言(Java、C#、Delphi)中,您只能从一个父类继承,但可以实现许多接口。

很好的类比。你是说这个人是一个抽象类吗?@DotNetCookie-我真的不想说是或不是。这完全取决于你试图解决的问题的背景。如果您需要能够实例化一个“普通”Person对象,那么这就没有多大意义。在本例中(Person->Employee->Manager),将基类Person抽象可能是有意义的。我将用于Person接口的行为是IEat,它可以声明一个提要方法。关键是界面是交叉的,所以哺乳动物:IEat>Person>等和植物生命:IEat>仙人掌,所以人不是植物生命(有些行为类似),但他们都以某种方式进食。