问题标签 [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.
.net - 接口/抽象类中的静态方法
首先,我了解接口或抽象类(在 .NET/C# 术语中)不能具有抽象静态方法的原因。然后我的问题更集中在最佳设计解决方案上。
我想要的是一组“帮助器”类,它们都有自己的静态方法,这样如果我从第三方供应商那里获得对象 A、B 和 C,我可以拥有带有方法的帮助器类,例如
由于我的 AHelper、BHelper 和 CHelper 类基本上都具有相同的方法,因此将这些方法移动到这些类随后派生的接口似乎是有意义的。但是,希望这些方法是静态的,这使我无法拥有一个通用接口或抽象类来派生它们。
我总是可以使这些方法非静态,然后首先实例化对象,例如
但是,这段代码对我来说似乎并不直观。你有什么建议?我应该完全放弃使用接口或抽象类(我现在所处的情况)还是可以对其进行重构以完成我正在寻找的设计?
.net - .NET 抽象类
我正在设计一个网站导航层次结构。它是一棵节点树。
大多数节点都是页面。一些节点是链接(想想 Windows 中的快捷方式)。
大多数页面都包含 HTML 内容。一些执行代码。
我想将这些表示为这个类和抽象(MustInherit)类的集合......
这是我要存储所有这些的数据库表……
数据库表 http://img178.imageshack.us/img178/8573/nodetablefm8.gif
这就是我难过的地方。PageNodes 可能是也可能不是根。
我应该如何处理根类?
我不想拥有所有四个……
- HtmlPageNode
- 代码页节点
- Html根页面节点
- 代码根页面节点
我希望 HtmlPageNode 和 CodePageNode 类从 PageNode或从 RootPageNode 继承。那可能吗?
澄清:有多个根节点,根可能有父节点。每个都是唯一具有不同样式的子树的根。想想不同的、颜色编码的部门。(也许 root 是一个糟糕的名称选择。建议?)
更新:关于“根”名称......
我问过:是否有对应于子树的节点的特定名称?
c++ - 在 C++ 中使用接口的性能损失?
在 C++ 中使用接口(抽象基类)时是否存在运行时性能损失?
java - 有没有办法在 Java 中实现代数类型?
在 Java 中,是否有可能强制一个类具有一组特定的子类而没有其他子类?例如:
我可以以某种方式强制不能创建 A 的其他子类吗?
c# - C#抽象类,使用匿名而不是声明具体类?
我有一个抽象类,我想通过不创建继承抽象类的具体类来快速使用它。好吧,匿名定义抽象方法。
像这样的东西:
在 C# .net 2.0 中有可能吗?
unit-testing - 测试抽象类
如何使用 PHPUnit 测试抽象类的具体方法?
我希望我必须创建某种对象作为测试的一部分。虽然,我不知道这个的最佳实践,或者 PHPUnit 是否允许这样做。
java - 为什么实现接口的抽象类可能会错过接口方法之一的声明/实现?
当您使用抽象类来实现接口时,Java 中会发生一件奇怪的事情:接口的某些方法可能完全丢失(即既不存在抽象声明,也不存在实际实现),但编译器不会抱怨。
例如,给定接口:
以下抽象类在没有警告或错误的情况下被愉快地编译:
你能解释一下为什么吗?
java - 接口的骨架实现中的抽象方法
我正在重新阅读 Effective Java (2nd edition) item 18, prefer interfaces to abstract classes。在该项目中,Josh Bloch 提供了Map.Entry<K,V>
接口的骨架实现示例:
这个例子有两个问题:
- 为什么这里将 getKey 和 getValue 显式声明为抽象方法?它们是Map.Entry接口的一部分,所以我看不出抽象类中冗余声明的原因。
为什么要使用将这些原始方法(正如 Bloch 先生所说的那样)保留为抽象的习语?为什么不这样做:
// 骨架实现 public abstract class AbstractMapEntry implements Map.Entry { private K key; 私人V值;
}
这样做的好处是每个子类不必定义自己的字段集,并且仍然可以通过其访问器访问键和值。如果子类确实需要为访问器定义自己的行为,它可以直接实现 Map.Entry 接口。另一个缺点是在骨架实现提供的 equals 方法中,抽象访问器被调用:
Bloch 警告不要从为继承而设计的类中调用可覆盖的方法(第 17 项),因为它会使超类容易受到子类所做更改的影响。也许这是一个见仁见智的问题,但我希望确定这个故事是否还有更多内容,因为布洛赫在书中并没有真正详细说明这一点。
c# - 抽象类的准确使用
抽象类的确切用途是什么?普通类不能像抽象类那样做同样的事情吗?
c# - 我可以强制子类覆盖方法而不使其抽象吗?
我有一个带有一些抽象方法的类,但我希望能够在设计器中编辑该类的子类。但是,设计者不能编辑子类,除非它可以创建父类的实例。所以我的计划是用存根替换抽象方法并将它们标记为虚拟 - 但是如果我创建另一个子类,如果我忘记实现它们,我将不会收到编译时错误。
有没有办法标记方法,以便它们必须由子类实现,而不将它们标记为抽象?