问题标签 [abstract-methods]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 抽象方法的默认实现
我正在处理一个大型代码库,其中有很多类和这些类上的很多抽象方法。我对人们对我在以下情况下应该做什么的看法感兴趣。
如果我有一个带有抽象方法的类 Parent-A。将只有2个孩子。如果 Child-B 实现 AbstractMethodA 但 Child-B 没有实现,因为它不适用。
我是不是该
- 从 parent 中删除 abstract 关键字并使用 virtual 或 dynamic?
- 提供该方法的空实现。
- 提供一个在调用时会引发错误的实现。
- 忽略警告。
编辑:感谢所有答案。它证实了我的怀疑,这不应该发生。经过进一步调查,结果发现这些方法根本没有使用,所以我完全删除了它们。
java - 在 Java 中,何时应该在接口中使用抽象方法?
我在Java中有以下界面
foo() 和 bar() 有什么区别?什么时候应该使用摘要?
除非我遗漏了一些微妙的东西,否则两者似乎都能完成我想要的事情?
更新为什么要将 Java 接口方法声明为抽象的重复项?
c# - 派生类中的抽象方法覆盖,如何使私有
嗨,我有一个带有抽象方法的类“A”
我想用以下条件在派生类“B”中覆盖这个方法
- 它应该是 B 类私有的。
编译器不允许我在派生类“B”中将此方法声明为私有什么是正确的语法?
c# - C++/CLI:如何在 C++/CLI 中声明抽象(在 C# 中)类和方法?
C++/CLI 中以下 C# 代码的等价物是什么?
java - 抽象类应该至少有一个抽象方法吗?
抽象类是否必须至少有一个抽象方法?
oop - “抽象静态”方法 - 如何?
已经有几个关于为什么没有抽象静态方法/字段的问题,但我想知道如何实现以下伪代码:
这是问题:假设我想确保每个继承Animal
包含getNumberOfLegs()
方法的类(即几乎像一个接口,除了我确实希望抽象类实现所有子类共有的几种方法,因此纯接口不在这里工作)。getNumberOfLegs()
显然应该是一种静态方法(假设在一个完美的世界中,我们没有'使鸡和狗残废,因此getNumberOfLegs
不依赖于实例)。
如果没有“抽象静态”方法/字段,则可以将该方法从Animal
类中排除,然后存在某些子类没有该方法的风险。或者可以创建getNumberOfLegs
一个实例方法,但随后必须实例化一个类以找出该动物有多少条腿——即使这不是必需的。
通常如何实施这种情况?
编辑:这里我可以如何使用它。假设(现在这很荒谬,但无论如何......)每只动物的腿数是独一无二的,所以我可能会有类似的东西:
abstract-class - 何时以及为什么使用抽象类/方法?
我有一些关于抽象类/方法的基本问题。我知道抽象类的基本用途是为未来的类创建模板。但是它们还有其他用途吗?什么时候你应该更喜欢它们而不是接口,什么时候不喜欢?另外,抽象方法什么时候有用?
c# - 多态性和铸造问题
为了解释我的问题,这里是一个例子
我的问题是在 Main() 中我不知道 returnMyObject() 方法返回什么类型,所以我无法将它发送到 MyMethod。有没有办法投射物体?
java - 默认实现还是抽象方法?
将方法的默认实现放在超类中,并在子类想要偏离它时重写它,还是应该保留超类方法抽象,并在许多子类中重复正常实现?
例如,我参与的一个项目有一个类,用于指定它应该停止的条件。抽象类如下:
一个简单的实现可能是:
我们对对象执行此操作的原因是我们可以任意将这些对象组合在一起。例如:
但是,我们有一些停止条件需要通知事件已发生。例如:
eventHasOccurred(Event e)
我们应该如何在抽象超类中最好地表示?大多数子类可以有这个方法的无操作实现(例如AlwaysHaltingCondition
),而有些需要重要的实现才能正确操作(例如HaltAfterAnyEventHaltingCondition
),而其他子类不需要对消息做任何事情,但必须将其传递给它们的下属,以便它们将正常运行(例如ConjunctionHaltingCondition
)。
我们可以有一个默认实现,这将减少代码重复,但如果没有覆盖它会导致一些子类编译但不能正确运行,或者我们可以将方法声明为抽象,这将要求每个子类的作者想想他们提供的实现,尽管十分之九是无操作实现。这些策略的其他优点和缺点是什么?一个比另一个好吗?
c# - C# 设计:为什么抽象方法需要 new/override 而虚拟方法不需要?
为什么抽象方法需要 new/override 而虚拟方法不需要?
样品 1:
编译器将显示此错误: 要使当前成员覆盖该实现,请添加 override 关键字。否则添加新关键字
样本 2:
通过默认隐藏该方法,这将编译得很好。
我完全理解技术差异。但是我想知道为什么语言是这样设计的。在“示例 2”中也有同样的限制不是更好吗?我的意思是在大多数情况下,如果您创建一个与父类中同名的方法,您通常打算覆盖它。所以我认为明确声明 Override/New 对虚拟方法也是有意义的。
这种行为是否有设计方面的原因?
更新: 第二个样本实际上会导致警告。第一个示例显示错误,因为需要子类来实现抽象方法。我没有看到 VS.. 中的警告现在对我来说非常有意义。谢谢。