问题标签 [abstract-class]

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 投票
4 回答
5420 浏览

java - Java抽象类混淆:未调用覆盖的方法

所以我有两节课。一种是抽象的:

一个是具体的子类:

现在在子类中,我调用抽象类的 run() 方法,因为这应该对所有客户端都是通用的。run() 方法内部是对抽象方法 displayOptions() 的调用。

我在子类中重写了 displayOptions() 所以我假设它会调用子类方法,但它似乎没有。有没有办法做到这一点,或者我犯了一个明显的错误,或者我误解了抽象类应该如何工作?

PS 我尝试在子类 displayOptions() 中放置一个打印语句,以确保我没有用我调用的方法做一些愚蠢的事情。

非常感谢,

亚当

0 投票
11 回答
68563 浏览

c++ - 在 C++ 中使用抽象类

在将扩展对象作为参数传递给函数时,我尝试使用抽象类,但到目前为止我的尝试导致了一些编译器错误。

我有一些关于问题所在的线索,我显然不允许实例化抽象类,而且我相信 MyClass 中的一些代码正在尝试这样做,即使这不是我的意图。一些研究表明我应该将该对象作为指针引用来实现我想要的,但到目前为止我的尝试都失败了,我什至不确定这是不是答案(因此我在这里问)。

现在我将提交我对 Java 比对 C++ 更熟悉,并且我确信我的部分问题是由于这个。

这是我在我的程序中尝试做的一个例子:

此示例产生了与我在程序中遇到的相同的编译器错误:

更新

感谢大家的反馈。

从那以后,我将“MyClass::instance”更改为包含 A 类型的指针,但现在我得到了一些与 vtable 相关的奇怪错误:

我的修改代码如下(A和B没有修改):

0 投票
11 回答
3171 浏览

.net - 随着扩展方法的出现,抽象类的吸引力是否降低了?

.NET 中扩展方法的一个有趣方面是您可以将它们应用于接口。对我来说,我可以在接口附近定义功能而不定义使程序集混乱的抽象类似乎很好。

我知道抽象类并没有过时或任何东西,但是您对在代码中使用这种副作用有何感想?

例子:

0 投票
2 回答
503 浏览

c# - 我怎样才能拥有一个实现接口并从抽象类继承的类?(C# .NET 3.5)

我有一种情况,我认为我需要接口和抽象类提供的功能。

我正在创建要在模拟中使用的模型。每个模型都包含在一个 C# 类中,该类实现了一个 IModel 接口(我的设计,因此可以对其进行修改)。我还创建了一个 c++ 非托管 Win32 DLL,它充当我的 C# 模型类和仿真环境之间的桥梁。模型类通过 COM 调用,因此需要接口。

我刚刚收到一个新要求,即这些模型类应该可以通过独立于模拟环境的 Web 服务调用。现在这些模型相当敏感,客户端要求它们由客户端配置并在服务器上执行*。我认为如果我让模型类继承自抽象类,然后在服务器上创建一个 Web 服务方法,这将是可能的:

它从客户端接收模型对象,执行它并用结果填充它。

但是 - 我不能使用抽象类,因为模型需要 COM 实现的接口。

我怎样才能调和这两个要求?有人告诉我,可以让一个类实现一个接口并让该类派生自一个抽象类,但我找不到任何例子。如果可能的话,语法是什么?如果不可能,我还能做什么?

*模型类实际上调用了一个古老的fortran可执行文件,因此类的模型配置不会泄露太多关于模型如何工作的信息。

0 投票
4 回答
4341 浏览

c++ - 这种间接函数调用有什么好处?

我在库中找到了以下代码:

现在我想知道:为什么要使用这种间接方式?是否有任何理由说明上述方法比简单的替代方法更好:

0 投票
5 回答
21404 浏览

c# - 根据子类从基类指定抽象方法的返回类型

我有以下结构:

我想创建一个抽象方法,它返回具体子类是什么类。因此,正如您从示例中看到的那样, in 中的方法SubOne应该返回List<SubOne>,而 in 中的方法SubTwo应该返回List<SubTwo>

我在基类中声明的签名中指定什么类型?


[更新]

感谢您发布的答案。

解决方案是使抽象类通用,如下所示:

0 投票
5 回答
13707 浏览

oop - 接口和抽象类有什么区别?

复制:

何时使用接口而不是抽象类,反之亦然?

可能是最著名的软件开发人员工作面试问题之一。

你的答案是什么?

编辑:我试图找出你会如何在现实生活中回答这个问题。请尝试像在真实的工作面试中一样制定您的答案(要完整,但不要太长,当然不要发布链接)。

0 投票
8 回答
652 浏览

c# - 我是否需要一个抽象类或接口(或两者都不需要)?

我有一个仓库。有时我想通过名称查找框位置,有时通过描述,有时通过 UPC,也许还有其他东西等。这些查找方法中的每一个都调用相同的各种私有方法来查找信息以帮助定位数据。

例如,upc 调用一个私有方法来查找 rowid,name 也是如此,X 也是如此。所以我需要为所有这些方法提供该方法。我可能会以某种方式使用该 rowid 来查找货架位置(这只是一个示例。)

但我的问题是我是否应该有一个抽象类(或其他东西),因为我正在以不同的方式查找我的盒子。

换句话说,假设我的查找代码对于 UPC 和位置非常相似。每个方法都可以使用 (select * from xxxx where location =,或 select * from xxxx where upc =) 调用。我可以在同一个类中创建两个不同的方法

...再次,这将是一个大类

有什么理由我想要一个可以举行的超级课程

然后继承它并创建第二个类来覆盖我需要的任何版本的 LocateBox 方法?

我不知道为什么我想这样做,除了看起来 OOD,这真的意味着如果我有充分的理由我想这样做。但是,我知道没有优势。我只是发现我的类变得越来越大,我只是稍微改变了方法的名称和一些代码,这让我觉得继承可能会更好。

如果这很重要,请使用 C#。

编辑 - 如果我只给某人一个没有源但类定义的 .dll,我会这样做吗?类定义。会告诉我的属性等以及要覆盖的方法。

0 投票
4 回答
29865 浏览

c# - 在 C# 中的抽象类上使用接口

我正在学习来自 C++ 的 C# 并且遇到了障碍。

我有一个抽象类 AbstractWidget、一个接口 IDoesCoolThings 和一个派生自 AbstractWidget 的类,称为 RealWidget:

当我实例化一个 RealWidget 对象并在其上调用 DoCool() 时,编译器给我一个错误说

“RealWidget”不包含“DoCool”的定义

我可以将 RealWidget 对象转换为 IDoesCoolThings,然后调用将起作用,但这似乎没有必要,而且我也失去了多态性(即使我定义了 RealWidget.DoCool(),AbstractWidget.DoCool() 也将始终被调用)。

我想解决方案很简单,但是我尝试了很多方法,但我一生都无法弄清楚这一点。

0 投票
1 回答
3372 浏览

c# - C#反序列化未知抽象类

我只熟悉序列化的基础知识,现在我有了它的用处。我有一个现有的报告系统,其中包含一个 ReportBase 抽象类和多个从基类派生的报告。这些每个都有在构造函数中指定的不同报告参数,有时还有额外的方法。是否可以序列化任何派生类,然后在不知道派生类类型的情况下反序列化。

或者,我可以通过反射做一些事情来实现它。我可能会将序列化的对象存储到数据库中,因此可以将报告类添加到我想的另一个字段中。