繁体   English   中英

我如何在超类方法中使用子类的静态字段

[英]How do I use static field of subclass in super class method

我的超类上有一个代码,希望子类的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的静态字段,但是它编译错误导致超类仍然不知道WIDTH和HEIGHT在哪里。 我可以在子类中覆盖静态字段吗?

你不能那样做。 多态的全部意义在于,超级类对子类一无所知

换句话说:依赖关系仅“向上”流动。 子类取决于其父类,但反之则不然。

如果有的话,您可以执行以下操作:

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

然后在基类算法中调用getWidth(); 然后您的子类必须实现这些方法-这就是您实际上遵循“ 打开/关闭”原理进行正确的OO设计的方式。

因此,这里的解决方案是:您退后一步,对OO设计进行更多阅读; 怎么做; 以及它在Java中的实际工作方式。 记录在案:您真的想远离使用静态方法 -在良好的OO设计中这是一个异常 仅在确实有充分理由时才使用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM