Questions tagged «inheritance»

继承是一种重用现有对象的代码或从现有对象建立子类型的方法,或两者​​都取决于编程语言的支持。

1
Groovy中的特性,继承和接口,何时使用?
我正在学习groovy,我刚刚了解了2.3中添加的新功能,即Traits的添加。现在对我来说,特质似乎可以让您完成超类和接口可以做的所有事情。 在Groovy中添加特性会否使继承和接口过时? 如果不是,那么使用这些机制的最佳时间是什么?

9
棋类的继承与组成
快速搜索此堆栈交换显示,通常认为合成比继承更灵活,但与往常一样,它取决于项目等,并且有时继承是更好的选择。我想制作一个3D象棋游戏,其中每个棋子都有一个网格,可能有不同的动画等等。在这个具体的例子中,似乎您可以为两种方法都辩护,我错了吗? 继承看起来像这样(使用适当的构造函数等) class BasePiece { virtual Squares GetValidMoveSquares() = 0; Mesh* mesh; // Other fields } class Pawn : public BasePiece { Squares GetValidMoveSquares() override; } 当然遵循“是”原则,而构图看起来像这样 class MovementComponent { virtual Squares GetValidMoveSquares() = 0; } class PawnMovementComponent { Squares GetValidMoveSquares() override; } enum class Type { PAWN, BISHOP, //etc …

2
正确的设计可以避免使用dynamic_cast?
经过一些研究,我似乎找不到一个简单的例子来解决我经常遇到的问题。 假设我要创建一个小应用程序,可以在其中创建Squares,Circles和其他形状,将它们显示在屏幕上,在选择它们后修改其属性,然后计算其所有周长。 我会像这样做模型类: class AbstractShape { public : typedef enum{ SQUARE = 0, CIRCLE, } SHAPE_TYPE; AbstractShape(SHAPE_TYPE type):m_type(type){} virtual ~AbstractShape(); virtual float computePerimeter() const = 0; SHAPE_TYPE getType() const{return m_type;} protected : const SHAPE_TYPE m_type; }; class Square : public AbstractShape { public: Square():AbstractShape(SQUARE){} ~Square(); void setWidth(float w){m_width = w;} …

1
更改方法签名以在PHP中实现类
有没有关于PHP缺少泛型的体面工作,这些泛型允许静态代码检查以检测类型一致性? 我有一个抽象类,我想对其进行子类化,并且还强制其中一种方法从采用一种类型的参数更改为采用作为该参数的子类的参数。 abstract class AbstractProcessor { abstract function processItem(Item $item); } class WoodProcessor extends AbstractProcessor { function processItem(WoodItem $item){} } PHP不允许这样做,因为它正在更改不允许的方法签名。使用Java样式泛型,您可以执行以下操作: abstract class AbstractProcessor<T> { abstract function processItem(T $item); } class WoodProcessor extends AbstractProcessor<WoodItem> { function processItem(WoodItem $item); } 但是很明显,PHP不支持这些功能。 谷歌针对这个问题,人们建议使用instanceof在运行时检查错误,例如 class WoodProcessor extends AbstractProcessor { function processItem(Item $item){ if …

5
我们怎么知道偏爱合成而不是泛泛总是正确的选择?
无论对象是否物理存在,我们都可以选择以不同方式对其进行建模。在许多情况下,我们可以随意使用归纳或组合。但是,GoF的“偏爱组合胜于一般化”原则指导我们使用组合。因此,例如,当我们对一条线进行建模时,我们将创建一个包含两个类型为Point(组成)的PointA和PointB成员的类,而不是扩展Point(广义化)。这只是我们可以随意选择合成或继承进行建模的简化示例,尽管对象通常要复杂得多。 我们怎么知道这是正确的选择?至少很重要,因为如果做错了,可能要进行大量的重构?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.