无法对非静态方法问题进行静态引用

时间:2013-11-17 12:39:12

标签: java

我在类Person中覆盖了方法toString(),但是我无法在我的main方法中使用它 - “无法从类型Object中对非静态方法toString()进行静态引用”

class Person {
private String name;
private int id;

public Person(String name,int id) {
    this.name = name;
    this.id = id;
}


@Override
public String toString() {
    String result = "Name: "+this.name+" ID: "+this.id;
    return result;
   }
}

public class Testing {
public static void main(String[] args) {


    Person person = new Person("Ivan",1212);
    System.out.println(toString()); // Cannot make a static reference to non-static method 

   }
}

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

使用:

System.out.println(person.toString());

toString方法是一种非静态方法,这意味着它与特定实例相关。

如果要调用它,则需要在特定的Person实例上调用它。

答案 1 :(得分:0)

您尝试从静态上下文(在本例中为main方法)调用非静态方法。要调用Person对象的toString方法,您需要执行person.toString()

有时将我们的代码视为英语有助于我们理解它。此语句的英语是“将人员转换为字符串”。我们把它变成代码。

人物映射到我们创建的person对象。 “to a string”映射到toString()方法。对象和动词(方法)在Java中用句点分隔。上述英语的完整代码为person.toString()

答案 2 :(得分:0)

你不能这样调用这个方法,你应该使用引用“person”!

System.out.println(person.toString());

答案 3 :(得分:0)

toString(....)Person类的成员方法。这意味着您可以通过类的对象实例调用它。因此,您需要在person.toString()

中调用toString()而不是System.out.println(....);