Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在接口中使用set/get方法_Java_Interface - Fatal编程技术网

Java 在接口中使用set/get方法

Java 在接口中使用set/get方法,java,interface,Java,Interface,我是Java新手(整整一年!) 我的问题是如何在接口中编写set/get方法和静态字段,并在另一个类中实现它 我的代码如下:(简短!) 在语句number=num中有错误,但在setName方法中没有错误 您无法在接口中定义实例字段(它们是常量-静态最终值,这要感谢,因为它们只是实现的一部分。因此,接口中只有getter和setter,而实现中会出现该字段 而setNumber应该返回一个void而不是int。为了获取,我建议您添加int getNumber() 如您所见,只有setNumber

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

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

我的代码如下:(简短!)

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

您无法在接口中定义实例字段(它们是常量-
静态最终值,这要感谢,因为它们只是实现的一部分。因此,接口中只有getter和setter,而实现中会出现该字段

setNumber
应该返回一个
void
而不是
int
。为了获取,我建议您添加
int getNumber()

如您所见,只有
setNumber
MyInterface
的一部分。消费者不需要知道该号码是如何存储的,因此它是一个实现细节


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

接口不能包含方法体定义,默认情况下,字段是
public
final
static
,通常用于常量声明。它将在您要导入的位置定义删除此接口

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


但是,
抽象类
既可以包含具体方法,也可以包含抽象方法。

您不能更改接口中声明的字段,因为它们是由deafulat
public static final
声明的

您将看到
final
,因此它们在初始化后无法更改

在接口中,不能像在代码中那样给出方法的实现

只需将
放在方法签名之后,而不是
{}
(甚至不是空的
{}
):


当您在接口中定义一个值时,它是隐式的
公共静态final
,即它是不可变的,而不是实例字段

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


顺便说一句,如果您有一个
抽象类
以及一个
接口

接口
中的
字段默认为公共静态最终即常量,则可以执行此操作。请记住,您已经在
接口
中初始化了
编号
,并尝试在中更改其值我们的实现类打破了最终变量的规律

发件人:

变量可以声明为final。final变量只能声明为final 指定给一次。声明变量final非常有用 其值不会改变且有助于避免的文档 编程错误

如果最后一个变量被指定给了,则是编译时错误 在紧接转让之前,它肯定是未转让的(§16)

接口中的方法也是默认的公共抽象。我不理解你接口中的方法签名。它应该是如下所示

public void method();

或者更确切地说,你可以在接口中声明的字段只有常量。你应该三思而后行,看看你是否真的想在
接口中设置setter
。鉴于你不知道实现,如果你强迫他们使用setter,你可能说得太多了-虚拟或常量实现不需要它们。我同意。但是,OP已经有了“孤独”的setter,我认为它比getter更不常见。这就是为什么我添加了这两个。除了所有正确的答案之外,setNumber方法当前必须返回int值,否则它将无法编译。可能是
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; }
}
public int setNumber(int num);
public void method();