我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。
我的假设是做一个像这样的抽象函数:
public abstract Tool getWeakness();
RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆盖父类的函数:
@Override public ToolPaper getWeakness() { return null; }
这个函数要回归什么才能做到这一点呢?我不能简单地“返回工具纸;”?那么,我如何创建一个函数,它返回工具的弱子类,而不返回字符串呢?
Public ToolPaper GetFactony
不是有效的重写,因为您已更改了签名。
您需要返回工具
的实例,而不是您拥有的类
的实例3(您不能实例化抽象类)
所以,你应该
public class ToolPaper extends Tool {
public ToolPaper() {
super("paper");
}
@Override
public Tool getWeakness() { return new ToolScissors(); }
}
如果您想避免为每个虚弱调用初始化新对象,也可以考虑使用单例...否则,如果在任何时候比较类的相等性,则需要实现equals方法
在Java,类是第一类对象,因此可以像任何其他对象一样返回。
您将希望使用泛型来确保不使用错误类型的类。方法签名可以是:
public abstract class Tool {
public abstract Class<? extends Tool> getWeakness();
}
您的实现将是
public class Rock extends Tool {
public Class<? extends Tool> getWeakness() {
return Paper.class;
}
}
编辑:正如其他人提到的,设计表明应该返回工具
实例,而不是类
。虽然一个类可以返回它弱的类的实例(最好是静态的),但这将是一个糟糕的设计。如果UML是您自己的,我建议更改签名以指示将返回class
。
我正试图从使用observable转换下面的observable代码。使用可管道操作符创建到。 我已经尝试了下面的方法,但是我得到了一个转换错误,无法转换可观察的类型。看不见的。如有任何帮助,我们将不胜感激。
问题内容: 在python 3中,我可以设置参数并返回类型注释。例: 问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例: 这段代码有错误 这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能 UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用 可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。 问题答
如果我有以下代码 首先,这甚至是可能的,因为它编译得很好。但是我不能使用中的方法执行操作: makeCan是否不同时返回Can和PromotionalCan?如果是这样,当返回PromotionalCan时,如何对变量进行操作?谢谢 编辑:PromotionalCan继承自Can,第二种方法是在PromotionalCan中
现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。
我想写一个函数返回一个数组,其所有子数组的长度必须为2。例如,返回将是。 我定义: (1); 和 我觉得(1)太复杂了。有更简单的吗?
假设我已经包装了我的C类和,并且可以通过SWIG生成的模块从Python访问它们: 在Python中,我创建了面向用户的类,它是一个浅层代理,主要添加docstring,并允许IDE对参数名称进行制表符补全: 问题在于,返回类型为,它没有docstring,也不显示参数名称(swig将所有参数公开为)。相反,我希望它提供我自己的浅代理