在接口中使用set / get方法

时间:2012-12-14 12:12:14

标签: java interface

我是Java新手(整整一年!)

我的问题是我如何在界面中编写set / get方法和静态字段,并在另一个类中实现它。

我的代码是这样的:(简短!)

public interface myInterface{
int number=0;

public int setNumber(int num);{

}
}

// my class

public void myClass extends JFrame implements myInterface{

 ...

public int setNumber(int num){
   number=num;                      // Error!   Why? What I do?

 }
}

在语句number=num中它有错误,但在setName方法中没有错误!

5 个答案:

答案 0 :(得分:15)

您无法在接口中定义实例字段(它们是常量 - static final - 值,感谢Jon,因为它们是实现的一部分<因此,只有 getter和setter 在接口中,而字段出现在实现中。

setNumber应该返回void而不是int。我建议您添加int getNumber()

public interface MyInterface {
  void setNumber(int num); // public is implicit in interfaces
  int getNumber();         // obviously
}

public class MyClass implements MyInterface {
  private int number = 0;

  public void setNumber(int num) { this.number = num; }
  public int getNumber() { return this.number; }
}

如您所见,只有setNumberMyInterface的一部分。消费者不需要知道数字的存储方式,因此它是一个实现细节。

此外,在Java中,您可以在PascalCase而不是camelCase中命名类和接口。

答案 1 :(得分:8)

在接口中定义值时,它隐式public static final,即它是不可变的,而不是实例字段。

接口用于定义合同,而不是行为,因此坚持所有实现都有此字段是没有意义的。

顺便说一句,如果您有abstract class以及interface

,则可以执行此操作

答案 2 :(得分:4)

您无法通过deafulat public static final更改界面中声明的字段。

您看到final,因此一旦初始化就无法更改。

在界面中,您不能像在代码中那样实现方法。

只需在方法签名后加;而不是{}(甚至不是空{}):

public int setNumber(int num);

答案 3 :(得分:3)

接口不能包含方法体定义,默认情况下字段为publicfinalstatic,通常用于常量声明。它将定义您要实现此接口的位置。

  

在Java编程语言中,接口是一种类似于类的引用类型,它只能包含常量,方法签名和嵌套类型。没有方法体。接口无法实例化 - 它们只能由类实现或由其他接口扩展。

     

ref

但是abstract class可以包含具体方法和抽象方法。

答案 4 :(得分:3)

interface中的字段默认为公共静态最终,即constants.remember您已在number中初始化interface并尝试更改其值在你的实现类中,它打破了最终变量的规律。

来自JLS

  

变量可以声明为final。最终变量可能只是   分配给一次。声明变量final可以起到很大作用   文档,其价值不会改变,可以帮助避免   编程错误。

     

如果将最终变量分配给除非,则为编译时错误   在作业之前,它肯定是未分配的(§16)。

接口中的方法默认为public abstract。我不明白你的界面中的方法签名。它应该是下面的东西。

public void method();