2016-10-03 92 views
-1

我希望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在哪里。我可以有在子类中重写的静态字段吗?

回答

8

你不能那样做。多态的整点在于超级类关于子类的一无所知

换句话说:依赖性仅向上流动。一个子类依赖于它的父类,但反之亦然。

如果在所有的,你可以做这样的事情:

public abstract class SuperClass { 
    protected abstract int getWidth(); 

到那么你的基类的算法中调用的getWidth();然后你的孩子必须实现这些方法 - 这就是你遵循开放/关闭原则实际进行适当的OO设计的方式。

所以,这里的解决方案是:你退一步,做更多的OO设计阅读;怎么做;以及它如何与Java一起工作。并记录:你真的想保持从使用静态 - 这是一个异常在良好的面向对象设计;只有在你有充分的理由这样做时才能使用!

+0

这节省了我的一天,非常感谢。 :) –