Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在超类方法中使用子类的静态字段_Java - Fatal编程技术网

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

Java 如何在超类方法中使用子类的静态字段,java,Java,我在我的超类上有一个代码,它需要从子类计算宽度和高度 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 positi

我在我的超类上有一个代码,它需要从子类计算宽度和高度

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));
    }
}

我必须使用宽度和高度的静态字段,但它的编译错误导致超类仍然不知道宽度和高度在哪里。我可以在子类中重写静态字段吗

你不能那样做。多态性的全部要点是超级类对子类一无所知

换句话说:依赖关系只向上流动。子类依赖于它的超类,但反之亦然

如果有的话,您可以这样做:

public abstract class SuperClass {
  protected abstract int getWidth();
然后在基类算法中调用getWidth;然后,您的子类必须实现这些方法——这就是按照开放/封闭原则进行适当OO设计的方式

因此,这里的解决方案是:您后退一步,对OO设计进行更多的阅读;如何做到这一点;以及它在Java中的实际工作方式。作为记录:你真的不想使用静态——这是好的OO设计中的一个反常现象;只有当你有很好的理由这样做时才应该使用