在接口中使用set/get方法

Saj*_*jad 4 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?

 }
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*eid 18

你不能在接口中定义实例字段(它们是常量 - 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; }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,只是其中setNumber的一部分MyInterface.消费者不需要知道数字的存储方式,因此它是一个实现细节.

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

  • 或者更确切地说,您可以在接口中声明的唯一字段是常量. (10认同)

Pet*_*rey 8

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

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

顺便说一下,如果你有一个abstract class或多个,你可以做到这一点interface