为什么这个方法在方法中覆盖失败?

时间:2013-07-11 19:56:23

标签: java override

我是一名java新手,目前正在阅读有问题和答案的培训材料。以下代码收到编译错误

The method Hello() is undefined for the type Hello

我不明白为什么我会收到此错误,因为代码对我有意义。请提供一些解释。谢谢!

public class Hello {
    String title;
    int value;

    public Hello() {
        title += "World";
    }

    public Hello(int value) {
        this.value = value;
        title = "Hello";
        Hello();
    }
}

3 个答案:

答案 0 :(得分:2)

你不能在你的其他重载构造函数的后续调用中调用构造函数。 对同一个类或超类的构造函数的调用必须是构造函数中的第一个语句。 你必须通过this()或super()

来调用它
public Hello(int value){
    this();
    this.value=value;
    title = "Hello";
}

答案 1 :(得分:2)

与错误一样,您尚未实现名为Hello的方法。您已为Hello类实现了构造函数,但未实现方法Hello()。如果你想调用另一个构造函数,它必须是this(...)super(...),并且是构造函数的第一行。

声明方法Hello()似乎在语言上被接受,您可以通过添加返回类型来完成,如下所示:

public type Hello() {
    ...
}

但我强烈反对。

答案 2 :(得分:1)

因为你的类中有2个构造函数而没有方法。如果您需要方法,请使用与类名称不同的名称命名并使用camelCase。另外,不要忘记编写返回类型。如果您不想返回任何内容,请使用void。例如,这会编译:

public class Hello {   

    String title;
    int value;

    public void append() {
        title += "World";
    }

    public void setValue(int value) {
        this.value = value;
        title = "Hello";
        append();
    }
}

如果你想拥有构造函数而不是方法,你必须使用this()调用其他构造函数,它必须在第一行:

public class Hello {   

    String title;
    int value;

    public Hello() {
        title += "World";
    }

    public Hello(int value) {
        this();
        this.value = value;
        title = "Hello";
    }
}