相关疑难解决方法(0)

接口与抽象类(通用OO)

我最近接受过两次电话采访,其中我被问及接口和抽象类之间的区别.我已经解释了他能想到的每一个方面,但似乎他们在等我提一些具体的东西,我不知道它是什么.

根据我的经验,我认为以下是正确的.如果我错过了重点,请告诉我.

接口:

在接口中声明的每个单独的方法都必须在子类中实现.接口中只能存在事件,代理,属性(C#)和方法.一个类可以实现多个接口.

抽象类:

只有抽象方法必须由子类实现.Abstract类可以有实现的常规方法.Abstract类还可以在Events,Delegates,Properties和Methods旁边有类变量.由于C#中不存在多重继承,因此类只能实现一个抽象类.

  1. 毕竟,面试官想出了一个问题"如果你有一个只有抽象方法的抽象类怎么办?那么它与界面会有什么不同?" 我不知道答案,但我认为这是上面提到的继承权吗?

  2. 另一位采访者问我,如果你在界面中有一个Public变量,那么它与Abstract Class有什么不同?我坚持认为你不能在界面中有一个公共变量.我不知道他想听到什么,但他也不满意.

另见:

oop abstract-class interface

1372
推荐指数
30
解决办法
69万
查看次数

接口与基类

我何时应该使用接口,何时应该使用基类?

如果我不想实际定义方法的基本实现,它应该始终是一个接口吗?

如果我有狗和猫类.为什么我要实现IPet而不是PetBase?我可以理解有ISheds或IBarks(IMakesNoise?)的接口,因为那些可以基于宠物放在宠物上,但我不明白哪个用于通用Pet.

language-agnostic oop static-typing interface base-class

754
推荐指数
17
解决办法
15万
查看次数

我该如何解释Interface和Abstract类之间的区别?

在我的一次访谈中,我被要求解释InterfaceAbstract类之间的区别.

这是我的回答:

Java接口的方法是隐式抽象的,不能有实现.Java抽象类可以具有实现默认行为的实例方法.

在Java接口中声明的变量默认为final.抽象类可能包含非最终变量.

默认情况下,Java接口的成员是公共的.Java抽象类可以具有类似私有,受保护等类通常的类成员.

应使用关键字"implements"实现Java接口; 应使用关键字"extends"扩展Java抽象类.

接口只能扩展另一个Java接口,抽象类可以扩展另一个Java类并实现多个Java接口.

Java类可以实现多个接口,但它只能扩展一个抽象类.

然而,面试官并不满意,并告诉我这个描述代表了" 书本知识 ".

他告诉我一个更实际的回答,解释我何时会使用实际例子在界面上选择一个抽象类.

我哪里做错了?

java oop inheritance abstract-class interface

456
推荐指数
13
解决办法
42万
查看次数

工厂模式.何时使用工厂方法?

什么时候在对象中使用工厂方法而不是Factory类是个好主意?

design-patterns factory factory-method factory-pattern

261
推荐指数
8
解决办法
14万
查看次数

每个优秀的.NET开发人员应该能够回答的问题?

我的公司即将雇用.NET开发人员.我们在各种.NET平台上工作:ASP.NET,Compact Framework,Windowsforms,Web Services.我想编制好的问题列表/目录,这是一种最低标准,以确定申请人是否有经验.所以,我的问题是:

您认为一个优秀的.NET程序员应该回答什么问题

我也将它视为自己的清单,以便了解我自己的赤字在哪里(有很多......).

替代文字

*更新:它想明确我们不仅仅测试.NET知识,解决问题的能力和一般编程技能对我们来说更为重要.

.net

246
推荐指数
12
解决办法
52万
查看次数

战略模式的现实世界范例

我一直在阅读有关OCP主要内容以及如何使用策略模式来实现这一目标.

我打算尝试向几个人解释这个,但我能想到的唯一例子是根据"订单"的状态使用不同的验证类.

我在线阅读了几篇文章,但这些文章通常没有描述使用该策略的真实原因,如生成报告/账单/验证等...

是否有任何现实世界的例子,您认为策略模式是常见的?

c# java design-patterns strategy-pattern

88
推荐指数
9
解决办法
7万
查看次数

我何时必须使用接口而不是抽象类?

我想知道什么时候应该使用接口.

让我们考虑以下事项:

public abstract class Vehicle {
   abstract float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)

并且:

public interface IVehicle {
  float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地实现它们,它们具有相同的功能......但是我也可以在我的车辆类中添加一些变量,这些变量可能应该用在车辆中(maxSpeed,carType ......)

使用接口的原因是什么?

谢谢!

编辑:我在另一个帖子中找到了一个很好的链接:http://www.thecoldsun.com/en/content/01-2009/abstract-classes-and-interfaces

java oop inheritance abstract-class interface

85
推荐指数
6
解决办法
16万
查看次数

何时使用装饰器模式?

我正在研究我的设计模式,我在编码中尚未认真使用的一种模式是装饰模式.

我理解这种模式,但我想知道的是现实世界中一些具体的例子,装饰者模式是最佳/最佳/优雅的解决方案.需要装饰器模式的特定情况非常方便.

谢谢.

design-patterns decorator

58
推荐指数
5
解决办法
3万
查看次数

为什么接口首选抽象类?

我最近参加了一次采访,他们问我"为什么接口比抽象类更受欢迎?"

我尝试给出一些答案,如:

  • 我们只能获得一个Extends功能
  • 他们是100%抽象
  • 实施不是硬编码的

他们让我带走你使用的任何JDBC api."为什么他们是接口?".

我可以为此得到更好的答案吗?

java oop abstraction interface

35
推荐指数
7
解决办法
1万
查看次数

何时使用接口或抽象类?何时使用?

虽然某些指导原则指出,当你想为继承不是明确的类定义合同时应该使用接口(IDomesticated),当类是另一个(Cat : Mammal,Snake : Reptile)的扩展时继承,有些情况(在我看来)这些准则进入灰色地带.

例如,说我的实施是Cat : Pet.Pet是一个抽象类.应该说是扩大到Cat : Mammal, IDomesticated那里Mammal是一个抽象类,IDomesticated是接口?或者我是否与KISS/YAGNI原则相冲突(尽管我不确定Wolf将来是否会有一个课程,但是无法继承Pet)?

远离隐喻Cats和Pets,假设我有一些表示传入数据源的类.他们都需要以某种方式实现相同的基础.我可以在抽象Source类中实现一些通用代码并从中继承.我也可以创建一个ISource接口(对我来说感觉更"正确")并在每个类中重新实现通用代码(这不太直观).最后,通过制作抽象类和界面,我可以"吃蛋糕并吃掉它".什么是最好的?

这两种情况提出了仅使用抽象类,只使用接口并同时使用抽象类和接口的要点.这些都是有效的选择,还是存在"规则",以便何时应该使用另一个?


我想通过"同时使用抽象类和接口"来澄清,当它们基本上表示相同的事物(Source并且ISource两者都具有相同的成员)时,包括这种情况,但是类在接口指定合同时添加了通用功能.

另外值得注意的是,这个问题主要针对不支持多重继承的语言(例如.NET和Java).

oop abstract-class interface

33
推荐指数
3
解决办法
4万
查看次数