有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使代码可用于其他子类和子类

我制作了一个超类(抽象)、一个子类(抽象)和一个子类

有一段代码我想保存在超类的构造函数中,但除非我把它放在子类中,否则它无法正常工作

超类:

public abstract class SuperClass{

protected int x, y, halfX, halfY;

public SuperClass(){
    halfX = x / 2;
    halfY = y / 2;
}

子类:

public abstract class SubClass extends SuperClass{

public SubClass(int x, int y){
    this.x = x;
    this.y = y;
}

子类:

public class SubSubClass extends SubClass{

int half;

public SubSubClass(int x, int y){
    super(x, y);
}

public void myMethod(){
    half = halfX + halfY;
}

如果我从超类构造函数中删除halfX = x / 2;halfY = y / 2;并将其放入子类构造函数中,代码就会工作。像这样:

public abstract class SubClass() extends SuperClass{

public SubClass(int x, int y){
    this.x = x;
    this.y = y;

    halfX = x / 2;
    halfY = y / 2;
}
}

我希望这段代码可用于其他子类(和子类),而不是仅用于该子类


共 (1) 个答案

  1. # 1 楼答案

    正如您在SubSubClass中调用super(x, y);,您需要在SubClass中执行同样的操作。它没有什么神奇之处,只需将值传递给超类,这样xy将被设置,然后再尝试计算一半的值

    我强烈建议尽可能地将字段设置为final,在这种情况下,它们应该是final

    顺便说一句:如果你想看看发生了什么,你可以在调试器中单步执行你的代码

    public abstract class SuperClass{
    
        protected final int x, y, halfX, halfY;
    
        public SuperClass(int x, int y){
            this.x = x; // set x before using it.
            this.y = y; // set y before using it.
            halfX = x / 2;
            halfY = y / 2;
        }
    }
    
    public abstract class SubClass extends SuperClass{
    
        private final int z;
    
        public SubClass(int x, int y, int z){
            super(x, y);
            // only set fields of SubClass
            this.z = z;
        }