gpt4 book ai didi

java - 使代码可供其他子类和子子类使用

转载 作者:行者123 更新时间:2023-12-01 21:53:21 26 4
gpt4 key购买 nike

我创建了一个父类(super class)(抽象)、一个子类(抽象)和一个子子类。

我想将一段代码保留在父类(super class)的构造函数中,但除非我将其放在子类中,否则它将无法正常工作。

super 类:

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;从 SuperClass 构造函数并将其放入子类构造函数中,代码可以工作。像这样:

public abstract class SubClass() extends SuperClass{

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

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

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

最佳答案

正如您在 SubSubClass 中调用 super(x, y); 一样,您也需要在 SubClass 中执行相同的操作。它没有什么魔力,只需将值传递给 SuperClass,以便在尝试计算一半值之前设置 x 和 y。

我强烈建议尽可能将您的字段设置为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;
}

关于java - 使代码可供其他子类和子子类使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34821568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com