构造函数中的方法调用不起作用,使方法最终仍然不起作用

时间:2012-01-03 23:05:26

标签: java constructor

我想在我的构造函数中设置我的对象状态。我称之为setState方法。 这一直给我null。我读到你不能调用可以在构造函数中重写的方法,所以我想这就是原因。我将setState方法设为最终并仍然看到问题。

可以在构造函数中执行myState = x;而不是调用setState(x)吗?

还有任何想法为什么即使方法是最终的,在构造函数中调用setState也不起作用?

还有一点是,完成所有这一切的类是抽象的,不确定这是否有所不同。

语言是Java。

我不确定发布代码,我公司对此很敏感。不想和我的雇主发生麻烦。

我会发布一些通用代码

public abstract class Abc

public Abc()
{
setState(uninit);
}

public final void setState(state s)
{
myState = s;
}

如果我更改了行

,这不起作用
setState(uninit);

myState = uninit;

它有效,但我不确定这是个好主意,因为我有一个州的设定者。

4 个答案:

答案 0 :(得分:0)

我想你忘了在子类构造函数中调用超级构造函数。

super();

类似

public class sub_abc extends abc}

 public sub_abc(){
  super();
  ...
 }
}

答案 1 :(得分:0)

不确定您的实际代码是什么,但我在setState()方法的形式参数列表中找不到参数名称。

public abstract class abc
{
    public abc()
    {
        setState(uninit);
    }

    public final void setState(state s)  //Seems to be something like this.
    {
        myState = s;
    }
}

此外,您必须遵循Java命名约定。因此,您的班级名称abc应替换为Abc,依此类推。

答案 2 :(得分:0)

我通常在构造函数中初始化我的类变量。 getter和setter通常只供其他类使用,所以我认为没有理由不能只使用myState = uninit;

public abstract class abc {
    private State uninit;

    public abc()
    {
        myState = uninit;
    }

    public final void setState(State newState) 
    {
        myState = newState;
    }
}

答案 3 :(得分:0)

在构造函数中执行myState = x;与调用setState(uninit);具有完全相同的效果;至少就我能想象你的原始代码而言。在那种情况下,错误必须在其他地方。也许你再次打电话给setState?或者两个测试之间的其他不同之处。我会在构造函数中放置一个断点并逐步执行代码。

此处没有任何内容可以让您的公司反对敏感。如果它让您更舒服,请使用an online compiler such as ideone