gpt4 book ai didi

java - 为什么通过创建扩展抽象类 "Square"的子类 "Figure"会出现 NullPointerException ?

转载 作者:行者123 更新时间:2023-12-02 01:05:23 25 4
gpt4 key购买 nike

我创建了一个名为“Figure”的抽象类,它有一个子类“Square”

public abstract class Figure {

public abstract float area();

public class Square extends Figure {

private float x, y, l;

public Square (float x, float y, float l) {
this.x = x;
this.y = y;
this.l = l;
}

public float area() {
return l*l;
}
}
}

然后我创建了一个测试

class FigureTest {

Figure figure;
Square square;

@BeforeEach
void setup() {
square = figure.new Square(3, 4, 5); //this causes a NullPointerException
}
}

但是我得到了一个N​​ullPointerException,我不知道为什么。我该怎么办?

最佳答案

好吧,首先您的代码通常是不正确的。虽然 SquareFigure 的子类/子类,但它永远不能用于实例化 Figure 类。这是因为 SquareFigure 类的嵌套内部类,要实例化内部类,必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();  

但是在您的情况下实例化外部类是不可能的,因为它是抽象类(只能用其子类的构造函数实例化)。我想在此指出的另一件事是,在一个 java 文件中只能有一个公共(public)类,其余其他类具有 default 访问修饰符。

现在来看上面代码的正确语法,它可能看起来像这样:

public abstract class Figure {
public abstract float area();
}

class Square extends Figure {
private float x, y, l;

public Square (float x, float y, float l) {
this.x = x;
this.y = y;
this.l = l;
}
@Override
public float area() {
return l*l;
}
}

现在您可以轻松实例化 Figure 类,如下所示:

class FigureTest {

Figure figure;

@BeforeEach
void setup() {
figure= new Square(3, 4, 5);
}
}

关于java - 为什么通过创建扩展抽象类 "Square"的子类 "Figure"会出现 NullPointerException ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60119468/

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