我是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方法中没有错误!
答案 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; }
}
如您所见,只有setNumber
是MyInterface
的一部分。消费者不需要知道数字的存储方式,因此它是一个实现细节。
此外,在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)
接口不能包含方法体定义,默认情况下字段为public
,final
和static
,通常用于常量声明。它将定义您要实现此接口的位置。
在Java编程语言中,接口是一种类似于类的引用类型,它只能包含常量,方法签名和嵌套类型。没有方法体。接口无法实例化 - 它们只能由类实现或由其他接口扩展。
但是abstract class
可以包含具体方法和抽象方法。
答案 4 :(得分:3)
interface
中的字段默认为公共静态最终,即constants.remember您已在number
中初始化interface
并尝试更改其值在你的实现类中,它打破了最终变量的规律。
来自JLS:
变量可以声明为final。最终变量可能只是 分配给一次。声明变量final可以起到很大作用 文档,其价值不会改变,可以帮助避免 编程错误。
如果将最终变量分配给除非,则为编译时错误 在作业之前,它肯定是未分配的(§16)。
接口中的方法默认为public abstract。我不明白你的界面中的方法签名。它应该是下面的东西。
public void method();