如何使用子类的静态字段的超类方法
问题描述:
我希望WIDTH和HEGHT从子类来计算如何使用子类的静态字段的超类方法
public SuperClass{
public Vector2 getCenter(){
float x = this.position.x + WIDTH/2;
float y = this.position.y + HEIGHT/2;
return new Vector2(x, y);
}
public void setCenter(Vector2 position){
float x = position.x - WIDTH/2;
float y = position.y - HEIGHT/2;
setPosition(new Vector2(x, y));
}
}
我必须使用的宽度和高度静电场对我的超级类的代码,但它编译错误导致超类仍然不知道WIDTH和HEIGHT在哪里。我可以有在子类中重写的静态字段吗?
答
你不能那样做。多态的整点在于超级类关于子类的一无所知!
换句话说:依赖性仅向上流动。一个子类依赖于它的父类,但反之亦然。
如果在所有的,你可以做这样的事情:
public abstract class SuperClass {
protected abstract int getWidth();
到那么你的基类的算法中调用的getWidth();然后你的孩子必须实现这些方法 - 这就是你遵循开放/关闭原则实际进行适当的OO设计的方式。
所以,这里的解决方案是:你退一步,做更多的OO设计阅读;怎么做;以及它如何与Java一起工作。并记录:你真的想保持从使用静态 - 这是一个异常在良好的面向对象设计;只有在你有充分的理由这样做时才能使用!
这节省了我的一天,非常感谢。 :) –