对于某些派生类,我想确保重写两个重载的抽象方法中的一个,但不是两者都重写。这可能吗?
abstract void move();
abstract void move(int x, int y);
有一个抽象的粒子类,它由几个类扩展。其中一个派生类接收鼠标输入以计算其移动,而其他类则不接收。所有派生类都有移动函数。为此编写继承的好方法是什么?
答案 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)
鉴于许多策略可以改变粒子的状态,似乎移动它的责任应该是粒子本身的外部。看起来粒子本身应该是一个简单的具体类,它保存状态信息(即位置等),而在运行时你可以确定哪种策略可以改变粒子的状态。