java - 为什么对象是属性时不能使用构造函数?

标签 java object constructor attributes

我在一个类中有这个属性,它也是一个对象。出于某种原因,每当我尝试为其使用构造函数时,它都会给我一个空指针异常。

这是对象的类:

    public class Posicion
{
    private int filas;
    private int columnas;

    public void Posicion(int x, int y)
    {
        filas = x;
        columnas = y;
    }
}

这是将对象作为属性的类:

public class Casillas
{
    protected char simbolo;
    protected Posicion coordenadas;

    public void Casillas(char simbolo, Posicion coordenadas) 
    {
        this.simbolo = simbolo;
        this.coordenadas = coordenadas;
    }
}

这是我得到空指针异常的地方(“inicio”方法的第一行):

public class R2D2 extends Casillas
{
    public R2D2 inicio(int x, int y)
    {
        coordenadas.Posicion(x, y);

        R2D2 art = new R2D2();
        art.Casillas('A', coordenadas);

        return art;
    }
}

我很感激我能得到的所有反馈。

编辑:这是 java 语言。

最佳答案

您正在调用 coordenadas.Posicion(x, y);coordenadas 从未初始化,此外,Posicion() 是一个constructor - 为了调用它,您应该使用 new 关键字:

public class R2D2 extends Casillas
{
    public R2D2 inicio(int x, int y)
    {
        // instead of this:
        //coordenadas.Posicion(x, y);

        // do:
        coordenadas = new Posicion(x, y);

        R2D2 art = new R2D2();
        art.Casillas('A', coordenadas);

        return art;
    }
}

此外,构造函数不声明返回类型,因此更改:

public void Casillas(...

到:

public Casillas(...

和:

public void Posicion(...

到:

public Posicion(...

另一个错误是:

art.Casillas('A', coordenadas);

再一次 - 这不是你应该调用构造函数的方式。我会建议修复此错误 - 但我不确定您在这里尝试做什么。

关于java - 为什么对象是属性时不能使用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878333/

相关文章:

php - 向构造函数注入(inject)多个参数是不好的做法吗?

java - setFirstResult 和 setMaxResults 没有按预期工作

python - 如何在python中实现多个构造函数?

java - 2个类,扩展同一个类,这可以简化吗?

arrays - NodeJS : Array. 减少以查找对象数组中的最小值和最大值

c# - 功能灵活的 super 类型

javascript - 使用 push() 将对象添加到对象中

java - 如何防止 JPA 查询包含 String 构造函数,当 null String 值仅可用时抛出 NullPointerException

Java:尝试通过网络发送一堆信息

java - 执行一段字节码