2014-09-02 45 views
-5

我需要如下创建用于在接口中描述的方法的类:不能使从类型MyString的静态参照非静态方法了setString(字符串)

public interface MyStringInterface { 

    // Sets the value of the current string 
    public void setString(String str); 

    // Returns the current string 
    public String getString(); 
} 

当我创建一个类与方法如下,总是有这个错误,并不会让我继续。我究竟做错了什么?我应该如何继续?

package seclass.assgn; 

public class MyString implements MyStringInterface{ 

    static String name; 

    public static void main(String[] args) {    
     setString("This is my sentence"); 
     System.out.println(getString()); 
    } 

    public void setString(String str){ 
     name = str; 
    } 
    public String getString() { 
     return name; 
    } 
} 
+1

您应该咨询与成千上万的其他这样的问题,其中一些你可以找到在你的右边,下_Related_部分。 – 2014-09-02 04:32:56

+1

'setString()'和'getString()'是非静态方法,所以它们不能从静态上下文中引用。 – August 2014-09-02 04:33:58

+0

完成这项工作的一种方法是简单地通过删除“静态”修饰符来使'name'非静态。 – lxcky 2014-09-02 04:37:30

回答

1

您需要的MyString一个实例 -

public static void main(String[] args) { 
    MyString my = new MyString();    
    my.setString("This is my sentence"); 
    System.out.println(my.getString()); 
} 

static String name; 

应该

private String name; 

或者,如果你不想一个实例只是使用

public static void main(String[] args) { 
    name = "This is my sentence"; 
    System.out.println(name); 
} 
1

首先,您不必在接口中重复“public”。

public interface MyStringInterface { 
    void setString(String str); 
    String getString(); 
} // end of class MyStringInterface 

然后,你必须使你实现的目标:

public class MyString implements MyStringInterface { 
String name; 

public static void main(String[] args) { 
    new MyString().top(); 
} 


void top() { 
    setString("This is my sentence."); 
    System.out.println(getString()); 
} 


@Override 
public void setString(String str) { 
    this.name = str; 
} 


@Override 
public String getString() { 
    return this.name; 
} 

} // end of class MyString 
+0

好! +1为正确的答案,并提到不要使用'public'关键字的接口成员。 – Seelenvirtuose 2014-09-02 06:00:02

+0

更好的是将测试程序与实现分开。但我认为,这不是问题。 – iGeeks 2014-09-02 08:03:51

相关问题