rya*_*zec 21 oop abstract-class class abstract
我决定开始自己做小编码项目,专注于代码质量而不是代码数量,并对抽象类的使用有疑问.
现在我知道抽象类和接口之间的区别与最大的接口(我认为)是接口允许您只定义需要使用接口和类的类实现的方法,允许您同时定义方法和成员如果您愿意,可以使用默认方法.我的问题是使用抽象类与普通类的主要好处是什么?我能想到的两者之间唯一真正的区别是你不能创建一个抽象类的实例.这两者之间还有其他差异吗?
Alv*_*par 20
从设计的角度来看,最好简化一些事情.我认为简化事物的最佳方法是使用一个简单的类比.让我们用鸟类的比喻......
接口:当您要强制执行需要定义的某些功能时,请使用此选项.例如,IBird与ScreamLikeABird和Fly(界面功能)签订了合同.但是你可以更具体,并拥有一个拥有Run合同的IOstrich.您可能还有一个拥有攻击合同的IHawk等.
摘要:当您要强制执行基本功能并具有基本属性时,请使用此选项.例如,Avian可能是鸟类的基类,它可能具有称为LayEgg的功能以及称为Age,Species,NumberOfChicks等的功能.这些东西不会/不应该改变鸟的行为,因为所有的鸟都会产卵......等等.但是当它以相同的方式尖叫或飞行时(有些甚至不会飞行)等等,并非所有的鸟听起来都是一样的....因此它们应该通过接口实现.
Jan*_*nen 13
除了无法创建抽象类的实例之外,某些语言可能支持在抽象类中使用抽象方法 - 类似于接口,抽象方法必须由继承自抽象类的类实现.
在我看来,抽象类的主要好处是是否有一些代码必须在相同类型的类之间共享.通常你可以使用一个接口,但有时这些类的功能可能重叠,你最终会得到代码重复.在这种情况下,您可以使用抽象类,只需将代码放在那里.
在OO世界中,抽象类用于强加一些设计和实现约束.而已.在任何情况下,您都不必使用抽象类.但有些情况下你可能会更好地施加这些限制.那么它们是什么?让我们通过比较它的oo-counterparts来看看.
抽象类与接口
如您所知,这是继承的两个主要概念.
基本上,接口仅用于声明您愿意继承底层服务,就是这样.不包含任何实现,也没有任何功能.从这个意义上讲,界面是抽象的.这就是为什么它比设计约束更多的设计约束.想想扬声器上的耳机插孔.每个耳机需要实现插孔接口(带启动,停止,监听,转向,转向等方法).每个耳机都应该覆盖此接口,以继承扬声器提供的功能并相应地实现.
另一方面,抽象类可以包括具有实现的方法.这是基本的区别,在这个意义上它可以利用重用而不是接口.此外,它们可能包含私有,受保护和非静态字段,您无法通过接口.您可以强制子类使用抽象方法(没有实现的方法)实现一些必备功能.抽象类比接口更敏捷.
当然更不用说,您可能只在Java中扩展一个类,您可以在其中实现接口数量.
抽象类与常规类
那么为什么不使用常规课呢?使用抽象类有什么好处?这很简单.如果使用抽象类,则强制核心功能由兄弟姐妹实现.作为开发人员,您不需要记住您应该实现基本功能.这是抽象类对常规类强加设计约束的地方.另外,通过使类抽象化,您可以避免意外创建(不完整)类.
| 归档时间: |
|
| 查看次数: |
40019 次 |
| 最近记录: |