java - 本例中处理多态性的正确方法(JAVA)

标签 java

我收到了一项可以简化为以下场景的任务:

客户需要订购盒子,这些盒子可以有不同的尺寸,不同的尺寸可以订购某些颜色(但不是所有颜色)并且具有不同的品质(但不是所有品质)。

现在我认为解决这个问题的最佳方法是将盒子类设置为抽象类,并让不同的盒子扩展盒子类以防止重复代码,但问题来了,我如何检查订单客户端在类中不存储静态变量的情况下输入是否有效(此类不能有此颜色等)?

我的解决方案是简单地将静态变量放在类的每个扩展中,然后检查每个类,而不初始化新对象,但这意味着在每个类中重复变量声明。

感谢任何帮助。

最佳答案

除非您愿意拥有一个非常复杂的类层次结构,否则您可能需要考虑使用查找表而不是继承/多态性。它肯定会更容易遵循和维护。

查找表的访问器可能类似于

Colors getColors(Size);
Colors getColors(Quality);
Qualities getQualities(Size);
Qualities getQualities(Color);

等等


更新

在这里使用 OOP 原则的唯一明智的方法是,如果您有足够的有关关系的信息来定义层次结构。

例如:

public abstract Shape {
  Color color;
  public setColor(Color c) { this.color = c}
  public abstract draw();
  ...
}
public Ellipse extends Shape ...
public Circle extends Ellipse ... /* this might be a stretch for mathemeticians */

如果您有有关该作业的更多信息,请发布。

关于java - 本例中处理多态性的正确方法(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251195/

相关文章:

java - 写入大量小文件

java - 我的 MacOS 应用程序弹出一个 java 图标

java - 测试时的 log4j 配置仅显示错误

java - hibernate :标识符

java - Eclipse 无法将 enum 识别为关键字

java - 按 Enter 键将光标从一个 JTextField 转移到另一个 JTextField?

java - 使用java和Xpath获取xml的所有属性

java - JFace TableViewer 在另一个线程中排序

java - Java中的finalize()方法什么时候被调用?

java - 如何避免过时的 MySQL/Hibernate 连接(MySQLNonTransientConnectionException)