尴尬的OOP:不继承的不同类的相同方法?

时间:2012-08-10 19:01:58

标签: java oop inheritance

这是交易: 我有两个不同类的对象,DataSizeActionDataColorAction。这些类在链的不远处有一个共同的祖先EncoderAction

这两个对象都公开了一个名为setScale(int scale)的方法,该方法为它们执行的编码设置了比例类型。在这两种情况下,该方法都做同样的事情。

但是,这种方法并不存在于任何共同的祖先中(顺便说一下,这个OO是我正在使用的库,设计不在我自己的判断范围内)。

我想编写一个方法,该方法接受DataSizeAction或DataColorAction并在该对象上调用setScale。

我的问题是:在我使用instanceof强行执行单独的案例之前,有没有更优雅的方法来处理这个问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

试试这个:

  1. 制作另一个扩展EncoderAction
  2. 的课程
  3. setScale声明为
  4. 中的抽象方法
  5. DataSizeActionDataColorAction扩展您的新班级。
  6. 现在,您可以编写代码来引用新基类的实例,并避免调用instanceof检查。

    注意:即使我在这里有所作为,我也会推荐Jonathon的答案。由于这是一个功能的保证,并且与您的对象的组成没有任何关系,因此接口可能是最佳选择。

答案 1 :(得分:3)

您可以在层次结构中添加接口吗?

interface IScalable {
   void setScale(int scale);
   int getScale();
}

class DataSizeAction extends EncoderAction implements IScalable {
   ...
}

class SomeoneElse {
   private int scale = 2;

   public void setScale(IScalable scalable) {
      scalable.setScale(this.scale);
   }
}