Java继承:有没有办法指定必须只覆盖两个方法中的一个

时间:2010-12-31 01:31:33

标签: java inheritance

对于某些派生类,我想确保重写两个重载的抽象方法中的一个,但不是两者都重写。这可能吗?


abstract void move();
abstract void move(int x, int y);

有一个抽象的粒子类,它由几个类扩展。其中一个派生类接收鼠标输入以计算其移动,而其他类则不接收。所有派生类都有移动函数。为此编写继承的好方法是什么?

4 个答案:

答案 0 :(得分:4)

没有。但如果你解释为什么要这样做,那么可能还有其他选择。

答案 1 :(得分:4)

不,这是不可能的,因为它会破坏多态规则。你应该重新考虑你的架构,因为这是严重的代码味道。

答案 2 :(得分:1)

不,Java要求所有abstract方法都由具体的子类实现。

决定是否应该忽略调用者的参数,而不是调用者。以具有多个渲染引擎的假设3D渲染系统为例:

abstract class Renderer {
  boolean isPointVisible(int x, int y);
}

class SimpleRenderer {
  @Override
  public boolean isPointVisible(int x, int y) {
    return true;
  }
}

class ComplexRenderer {
  @Override
  public boolean isPointVisible(int x, int y) {
    return x > 0 && x < 100 && y < 0 && y < 100;
  }
}

答案 3 :(得分:0)

鉴于许多策略可以改变粒子的状态,似乎移动它的责任应该是粒子本身的外部。看起来粒子本身应该是一个简单的具体类,它保存状态信息(即位置等),而在运行时你可以确定哪种策略可以改变粒子的状态。