问题标签 [superclass]

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 投票
9 回答
4236 浏览

java - Java的使用[接口/抽象类]

最近我决定看一下 Java,所以我对它和 OO 编程的方法仍然很陌生,所以我想在学习更多之前先搞清楚一些东西,(我想从好的实践开始永远不会很快)。

我现在正在编写一个小 2D 游戏,但我认为我的问题适用于任何非平凡的项目。为简单起见,我将提供我游戏中的示例。

我有不同种类的僵尸,但它们都具有相同的属性(x、y、健康、攻击等),所以我编写了一个接口Zombie,由 WalkingZombie、RunningZombie TeleportingZombie 等实现。这是最好的做法吗?我更喜欢抽象类吗?还是有一个超级班?(我不打算部分实现功能 - 因此我选择接口而不是抽象类

我有一个描述主角(幸存者)的类,由于它很大,我想编写一个具有不同功能的界面,以便我可以轻松查看和分享它的结构。这是好习惯吗?还是只是浪费空间和时间?

我希望这个问题不会被认为是主观的,因为我认为有经验的程序员不会不同意这种话题,因为接口/超类/抽象类的使用遵循逻辑规则,因此不仅仅是个人选择。

0 投票
2 回答
19547 浏览

iphone - 如何从别处调用 Objective-C 对象的超类的方法?

如果您正在实现一个子类,您可以在您的实现中显式调用超类的方法,即使您已经覆盖了该方法,即:

如果您想从子类实现之外的某个地方调用超类的方法怎么办,即:

这甚至可能吗?通过扩展,是否有可能在实现中上升不止一个级别,即:

0 投票
1 回答
258 浏览

java - 对于这个简单的层次结构 Java 问题,我最好的方法是什么?

首先,我很抱歉这个问题的标题,但我想不出一个更好的来描述我的问题。随意更改它:)

假设我有这个抽象类Box,它在一些私有变量上实现了几个构造函数、方法和任何东西。然后我有几个子类,比如BoxAand BoxB。这两个都实现了额外的东西。

现在我有了另一个抽象类Shape和一些子类,比如Squareand Circle

对于两者BoxABoxB我需要有一个Shape对象列表,但我需要确保只有Square对象进入BoxA' 列表,并且只有Circle对象进入BoxB' 列表。

对于该列表(在每个框上),我需要一个get()andset()方法以及一个addShape()andremoveShape()方法。

要知道的另一件重要的事情是,对于每个创建的框,无论是BoxA还是BoxB,每个Shape列表都是完全相同的。假设我创建了一个名为 的列表Squarels两个名为and的BoxA对象。无论如何,两者都必须具有相同的列表。boxA1boxA2boxA1boxA2ls

这是我的想法:

由于该类型对象的列表需要相同,因此我将其声明为,static并且与该列表一起使用的所有方法也是static. 现在,对于BoxB列表内容,课程几乎相同。我只会替换SquareTriangle问题就解决了。因此,对于创建的每个BoxA对象,列表将只有一个且相同。每个BoxB创建的对象都会发生同样的情况,但当然是使用不同类型的列表。

那么,你问我的问题是什么?好吧,我不喜欢代码... getList()setList()addShape()removeShape()方法基本上是重复的BoxABoxB,只是列表将包含的对象的类型不同。我想以某种方式避免所有这些方法“重复”。

我想不出在超类中做这件事的方法Box。尝试静态地执行它,使用Shape而不是Squareor Triangle,将不起作用,因为列表对于所有对象BoxABoxB对象来说只有一个,我需要它只是一个,但对于Box.

我怎样才能以不同的方式更好地做到这一点?

PS:我无法描述我的真实例子,因为我不知道我正在做的事情的正确英文单词,所以我只是使用了一个盒子和形状的例子,但它基本上是一样的。

0 投票
3 回答
249 浏览

java - 继承问题 OOP 扩展

如果父亲是父母,父母是人并且人有父亲,我创建以下内容:

实例:

这不起作用......现在尝试投射::

这也不起作用。

这种情况有什么作用?

0 投票
1 回答
2082 浏览

python - 在 Python 中调用超类的类方法

我正在开发一个 Flask 扩展,它将 CouchDB 支持添加到 Flask。为了使它更容易,我进行了子类couchdb.mapping.Document化,以便storeload方法可以使用当前的线程本地数据库。现在,我的代码如下所示:

为简洁起见,我省略了一些,但这是重要的部分。但是,由于 classmethod 的工作方式,当我尝试调用此方法时,我收到错误消息

我测试了用 替换调用mapping.Document.load.im_func(cls, db or g.couch, id),它可以工作,但我对访问内部im_属性并不特别满意(即使它们已记录在案)。有没有人有更优雅的方式来处理这个?

0 投票
2 回答
63 浏览

objective-c - 关于子类化的问题

这可能是以前问过的,但我不知道要搜索什么。这是我现在的层次结构:NSObject > FirstSubclass > SecondSubclass。但是我将在我的应用程序中实现一个新功能,当满足某个条件时,它需要更改 FirstSubclass 中的一些细节。所以实际上我需要一个介于 FirstSubclass 和 SecondSubclass 之间的子类来覆盖 FirstSubclass 的行为。我不需要覆盖 SecondSubclass 本身中的东西,但我需要super对我拥有的所有不同的 SecondSubclass 子类进行某种处理。我可以将 FirstSubclass 中的所有内容更改为使用“if then 语句”,但首先我想确定是否没有其他选择。我需要一个“协议”吗?喜欢在SecondSubclass : FirstSubclasslass <WeirdThingIDontKnow>?

0 投票
2 回答
368 浏览

java - 以编程方式检查 .class 文件是否扩展了特定类

我有一个问题我已经尝试解决了好几个小时。在 Eclipse 插件中,我有一个 ArrayList,其中包含一些 java .class 文件的完整路径(作为字符串)。我想做的是检查列表中包含的类是否扩展了特定类。我考虑过解析文件,寻找“扩展”之后的内容,但是我们谈论的是 .class 文件而不是 .java 文件。还有其他想法吗?

谢谢!

0 投票
2 回答
933 浏览

objective-c - 我可以更改班级的超级吗?

是否有可能选择一个类的超类(最好在 alloc 或 init 方法中),以便我的类从其他东西继承?

0 投票
11 回答
36258 浏览

oop - 何时实现接口,何时扩展超类?

我已经阅读了很多关于 Java 中的接口和类继承的内容,并且我知道如何做到这两点,而且我认为我对两者都有很好的感觉。但似乎没有人真正将两者并排比较并解释您何时以及为什么要使用其中一个。很多时候我都没有发现实现接口比扩展超类更好的系统。

那么什么时候实现一个接口,什么时候扩展一个超类呢?

0 投票
12 回答
97735 浏览

java - 从超类中获取子类的名称

假设我有一个名为Entity. 在那个类中,我有一个静态方法来检索类名:

现在我有另一个类扩展它。

我想获取用户的类名:

我的目标是看到控制台的“com.packagename.User”输出,但我最终会得到“com.packagename.Entity”,因为实体类是直接从静态方法引用的。

如果这不是静态方法,则可以通过this在类中使用关键字Entity(即:)轻松解决return this.class.getClass()。但是,我需要这种方法保持静态。关于如何解决这个问题的任何建议?