从抽象类调用时出现 Java NullPointerException

标签 java nullpointerexception abstract

我试图简单地扩展 Java 中的抽象类并调用存储在其中的一些方法。当我这样做时,我不断收到 NullPointerException。我在这里是否遗漏了一些关于抽象的东西?

这是父类:

public abstract class Shape {
    public Color color;
    public Point center;
    public double rotation;

    public Shape() {
        Color color = new Color();
        Point center = new Point();
        rotation = 0.0;
        System.out.println("shape created");
    }

    public void setLocation( Point p ) { center.locationX = p.locationX; center.locationY = p.locationY; }
    public void setLocation( double x, double y ) { center.locationX = x; center.locationY = y; }

    public abstract double calcArea();
    public abstract boolean draw();
}

还有子类:

public class Ellipse extends Shape {        
    public Ellipse() {
    }

    public double calcArea() {
        return 0.0;
    }

    public boolean draw() {
        return true;
    }
}

你可能想看点:

public class Point {
    public double locationX;
    public double locationY;

    public Point() {
        locationX = 0.0;
        locationY = 0.0;
    }
}

最后是主要功能:

public class MakeShapes {
    public static void main(String []args) {
        Ellipse myShapes = new Ellipse();
        myShapes.setLocation( 100.0, 100.0 );
    }
}

只要我使用 setLocation(),我就会得到 NPE。有什么想法吗?我的大脑因试图弄清楚这一点而受伤。谢谢!!!

最佳答案

这里的问题是您的 Shape 构造函数创建了一个名为 center 的本地 Point 引用并初始化了该引用而不是初始化字段(并且color 也有同样的问题)。像这样尝试:

public abstract class Shape {
    public Color color;
    public Point center;
    public double rotation;

    public Shape() {
        color = new Color(); //changed to intialize the field
        center = new Point(); //changed to intialize the field
        rotation = 0.0;
        System.out.println("shape created");
    }

    public void setLocation( Point p ) { center.locationX = p.locationX; center.locationY = p.locationY; }
    public void setLocation( double x, double y ) { center.locationX = x; center.locationY = y; }

    public abstract double calcArea();
    public abstract boolean draw();
}

关于从抽象类调用时出现 Java NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32704421/

相关文章:

java - YarnClient 运行时异常 : java. lang.NoClassDefFoundError: org/apache/hadoop/HadoopIllegalArgumentException

java - 列表更新后 onItemClick 停止工作

android - Android的位图不为空,但总是使nullpointerexception

java - 设置 View 颜色时出现空指针异常

java - 如何在 Java 中使用反射创建虚拟静态方法或功能等价物

java - 如何使方法参数类型ArrayList<Object>采用不同的对象类型

java - 如何使用 Timeline 在 JavaFX 上每 x 秒执行一个 void 方法?

java - 当 File-Url 中有空格时 Runtime.getRuntime().exec() 不起作用?

java - 将空对象转换为整数

PHP:有些人通过在主体中专门抛出异常来抽象方法 "fake"的原因是什么?