问题标签 [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.

0 投票
2 回答
93126 浏览

python - python @abstractmethod 装饰器

我已经阅读了关于抽象基类的 python 文档:

这里

abc.abstractmethod(function) 指示抽象方法的装饰器。

使用这个装饰器需要类的元类是ABCMeta或派生自它。ABCMeta 除非重写其所有抽象方法和属性,否则无法实例化具有派生元类的类。

这里

您可以将@abstractmethod装饰器应用于必须实现的方法,例如draw();然后,Python 将为未定义该方法的类引发异常。请注意,仅当您实际尝试创建缺少该方法的子类的实例时才会引发异常。

我已经使用此代码进行了测试:

代码很好,所以我不明白。如果我输入c.abstractMethod,我会得到:

我在这里缺少什么?ConcreteClass 必须实现抽象方法,但我也不例外。

0 投票
6 回答
2756 浏览

java - C++ 和 Java 中的抽象方法和覆盖函数

在 C++ 和 Java 或它们的相关规则中,对覆盖抽象方法的限制是什么。您必须匹配参数或返回类型。我通常会看到只使用返回类型而没有参数实现的抽象函数,是否由派生类来指定其余部分。它是如何工作的?

0 投票
7 回答
1999 浏览

java - 抽象类使用它自己的抽象方法?

我正在查看游戏中的一些代码,我遇到了一些我以前从未见过的东西,我真的不知道发生了什么。

这里发生了什么?当它调用时会发生什么entityInit()

0 投票
13 回答
11870 浏览

java - 有没有办法制作一个非抽象但必须被覆盖的方法?

有没有办法强制子类覆盖超类的非抽象方法?

我需要能够创建父类的实例,但是如果一个类扩展了这个类,它必须给出它自己的一些方法的定义。

0 投票
1 回答
2397 浏览

c# - c#中的抽象方法

老实说,我不知道为什么这让我失望。

上面的代码抛出了这个错误:

BankAccount.MakeWithdrawal()' 是抽象的,但它包含在非抽象类“Worksheet7.BankAccount”中

即使我将类声明为抽象类也是如此。有什么我在这里遗漏的东西,或者我在视觉工作室中遗漏了什么?

0 投票
3 回答
2522 浏览

java - 在声明抽象方法时指定默认返回

我有以下课程

界面:

继承抽象类的类:

当我在 Eclipse 中创建 MyClass 时,会自动创建 checkSomething() 方法,但默认返回值是 false。有没有办法在抽象方法定义中指定默认返回类型应该是什么?

0 投票
1 回答
1763 浏览

yii - Yii Behaviors 中的“抽象”方法

我一直在开发 Yii 应用程序。而且我想知道是否可以在模型行为中声明某种“抽象”方法。我知道不可能直接使用以下声明:

因为我们需要这个类的实例。但我也知道 Yii 很神奇:)

我只想让所有者类以强制顺序从行为中重新声明方法。当然,除了行为之外,我还可以使用界面,但是......

抱歉,如果我错过了要说的或不清楚的地方。只要问,我会尽力解释我的意思。

有人知道吗?

提前致谢。

UPD

我明白 Yii 只是 PHP。它不扩展 PHP。它是上层建筑。而且它没有多重继承,因为 PHP 没有。

我确实理解不能使用抽象关键字声明行为方法。这就是为什么我在引号中写了“抽象”这个词。但是无所谓。我知道行为是如何运作的。

我的问题是我是否可以以某种方式强制模型(例如 CActiveRecord 的子代)声明某种方法。

例如,出于我的目的,我可以这样做:

因此,如果我将此行为附加到我的模型并调用方法 doFantasticThings,此方法将尝试从模型(所有者)调用方法 prepareForFantastic。如果模型没有方法 prepareForFantastic 声明的新异常将被抛出,因为未声明的方法被调用。

看起来我自己已经回答了我的问题:) 你对此有何看法?

UPD2

是的,我知道如果我们不调用“抽象”方法,我们就不会知道它没有被声明。这是可解释语言的“魅力” :) 在代码运行之前,我们不知道是否有任何错误。虽然,如果我们能尽早知道这一点,那就太棒了。例如,一旦FantasticBehavior-class 的实例附加到模型,我们可以抛出一些子对象CException来显示必须在模型中声明哪些所需的方法。为了实现这一点,我们可以使用如下所列的东西:

我们需要覆盖attach类中的方法CBehavior并检查是否声明了“抽象”方法。方法abstractMethods用于获取列表“抽象”方法。

我不知道是否有attachBehavior事件存在。如果是这样,我们可以使用它而不是覆盖attach方法。

将这个想法基类用于具有“抽象”方法的行为。

你怎么看待这件事?

说不定以后我会为Yii做扩展名利双收?:))

0 投票
2 回答
847 浏览

java - 用模式设计风格的抽象方法定义抽象类

如何使用设计模式在抽象类中定义抽象方法,而某些方法方法可能会覆盖或更改其在子类中的行为?在这个例子中,public abstract class GameCharacterattack一个应该是模式的方法(定义一些方法,GameCharacter一些留空,在子类中被*覆盖*)。

0 投票
2 回答
198 浏览

php - PHP, OOP, 接口

我正在学习 PHP,我在想,

抽象类或接口中的方法称为抽象方法。

我的问题:

抽象类/接口中定义的抽象方法是否不包含在子类中?

如果是真的,那就意味着:

仅在子类内部的是未定义为抽象的方法/属性,这意味着接口在实现时无法创建子类。

也意味着:

当从抽象类/接口定义抽象方法时,扩展/实现抽象类/接口的类只需查看方法签名并确保这些方法被覆盖(女巫不是真正覆盖,重写是一个更好的词说(虽然我听到压倒一切))。

如果有人可以帮助我专业地理解抽象方法,祝你有美好的一天。

0 投票
0 回答
244 浏览

c# - 重命名抽象测试方法 (Visual Studio / c#)

问题:有没有办法手动命名测试方法而不是使用方法名?

背景:我目前是 BizTalk 开发人员,我们使用 BizUnit 框架来测试我们的项目。

为了让这些单元测试运行,我们使用 c# 在 Visual Studio 中构建单元测试的内部功能,从中我们调用 bizunit 框架来进行实际的(特定于 biztalk 的)测试。

令人讨厌的是,我们需要几行“样板”代码来创建 BizUnit 所需的测试用例;执行这些步骤的抽象类的使用促进了我们需要做的实际开发。此外,抽象类允许我们执行一些关于文档结构的“内部策略”(通过使用几个模板方法)。

抽象基类“IBaseTestScenario”包含称为“test”的实际方法:

使用这种结构,我们可以强制执行步骤的顺序,我们可以“提醒”开发人员提供一个体面的名称和描述(因为方法是抽象的,他们将被迫提供信息)以及执行该操作的实际代码测试(特定于每个场景)从样板代码中分离出来。

当我们想要创建一个场景时,我们只需要扩展这个基类并实现包含场景特定信息的抽象方法。

在您运行测试之前,这一切看起来都很整洁......

在测试结果窗口中,所有测试都称为“测试”,您需要将“类名称”列添加到视图中以便能够区分它们。

解决这个问题的快速(而且相当肮脏的方法)是删除接口中的 TestMethod 注释,并在每个单独的实现中放置以下“调用者”

有谁知道更改测试方法名称的(更好的)方法?使用接口的现有抽象方法“getName()”将是理想的......

亲切的问候,

斯蒂金