Java多态指针

我一直在研究 Java,但遇到了一个我无法解决的问题(我做了研究,但因为这是一个非常具体的问题,所以没有找到答案):

我正在尝试以与接口相同的方式添加类继承的变量和方法(有一个由已经有祖先的不同类继承的类,即:Actor extends Character 和 Weapon extends Item,我需要两者Actor 和 Weapon 具有 XY 坐标、宽度/高度和 move() 方法)

起初我认为接口是解决方案,但由于它们是 100% 抽象的,我每次都需要重新定义方法,对我来说,在这种情况下,这超出了继承的目的。

我曾想过在祖先树的根部创建一个上级父类(如 MovableObject),其中包括 Item 和 Actor 类,但由于它们在其他方面都如此不同,因此将它们置于同一祖先中感觉是违反逻辑的树。

编辑

谢谢大家的回复,我说过我会在尝试时更新,我做到了,但现在我意识到我的整个代码需要大量重构,所以我无法立即告诉你它是否有效. 虽然它确实解决了我的问题,因为我至少有一些事情要做。


函数式编程
浏览 120回答 2
2回答

大话西游666

您可以使用的语言结构是接口或抽象类。接口:定义不相关对象之间的通用行为(例如,可以序列化的对象、可以比较的对象等)。抽象类:定义跨对象层次结构的公共行为(例如,在 中定义方法并getPrice在 中Item继承该方法是有意义的Weapon)。在你的榜样,等方法getWidth(),getHeight(),getX()和getY()都不错的候选人接口(因为它们共享不相关的对象之间有一些共同的特点)。

慕森卡

// Another way to share this state would be via a Point interface and // aggregating two point objects in your Item and Character classesinterface Coordinates {    double getX1();    double getY1();    double getX2();    double getY2();}interface Dimension {    double getWidth();    double getHeight();}我不知道你的整个背景,但你确定你需要坐标和尺寸(我认为你可以从 X 和 Y 确定宽度和高度)?这些接口应该由您的两个祖先类(Character和Item)实现并通过层次结构继承。难道不是之间添加一个共同的祖先Character和Item只是让你能避免实施getX和getY的两倍。关于move方法,我认为这是另一个责任,您应该在其他地方定义它。// Not necessarily the right nameclass MoveHelper {    // You can pass either a Character or an Item here    // since both implement Coordinates    // Not necessarily the right signature    void move (Coordinates object)}根据您选择如何设计解决方案,该move方法可以成为一个static地方或一个对象,你会聚集在这两个Character和Item并委托给它的move实施。最后一点,请考虑您可以通过继承(接口和抽象类)或组合(如果您将MoveHelper和 委托给它以move实现Character和 中的实现,您会怎么做)实现重用Item。希望这可以帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java