1)代码下面的两个静态变量之间有什么区别。
Class A{
public static final String X = "XYZ";
}
interface A{
String X = "XYZ";
}
2)如果两个静态变量声明都相同,那么哪个是有效的。
即
Class A{
public static final String X = "XYZ";
void print(){
System.Out.Println(X);
}
}
OR
interface B {
String X = "XYZ";
}
Class A implements B{
void print(){
System.Out.Println(X);
}
}
答案 0 :(得分:5)
字段之间没有区别。来自section 9.3 of the JLS:
接口主体中的每个字段声明都是隐式的public,static和final。允许为这些字段冗余地指定任何或所有这些修饰符。
性能没有区别,因为在这两种情况下,编译器都会“内联”字段值:在执行时,它无论如何都不会访问字段。这只是因为你使用String
;如果该字段是基本类型或String
以外的类型,则代码将访问该字段...但我不希望它具有 signficant < / em>对性能的影响,你不应该担心它。写下最清晰的代码。
答案 1 :(得分:1)
1)两个常数具有相同的含义。默认情况下,接口中声明的字段为public static final
。
2)不应首选接口中的字段。 (除非您非常确信另一个界面不具有相同名称的字段)。
interface A
{
String X = "XYZ";
}
interface B
{
String X = "ABC";
}
class C implements A, B
{
public static void main(String[] args)
{
System.out.println(X); // Ambigous X
}
}
3)效率不会受到恒定位置的影响;在课堂上或界面中。
答案 2 :(得分:0)
答案 3 :(得分:0)
特性是接口中定义的 ALL 变量是public
final
,没有特别说明。
答案 4 :(得分:0)
一个。 Enum
湾界面
C。课程
我记得在“Effective Java”一书中简要讨论了这个问题。