[英]what is the difference between declaring constant in an interface and in class java
1)下面的两个静态变量有什么区别?
Class A{
public static final String X = "XYZ";
}
interface A{
String X = "XYZ";
}
2)如果两个static都是变量声明相同,那么哪个是有效的。
即
Class A{
public static final String X = "XYZ";
void print(){
System.Out.Println(X);
}
}
要么
interface B {
String X = "XYZ";
}
Class A implements B{
void print(){
System.Out.Println(X);
}
}
字段之间没有区别。 从JLS的9.3节开始 :
接口主体中的每个字段声明都是隐式的public,static和final。 可以为此类字段多余地指定任何或所有这些修饰符。
性能没有差异,因为在两种情况下,编译器都将“内联”字段值:在执行时,它将始终无法访问字段。 只是因为您使用的是String
, 如果该字段是除原始类型或String
之外的其他类型,则代码将访问该字段...但是我不希望这会对性能产生重大影响,因此您不必为此担心。 写出最清晰的代码即可。
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)效率不会受到放置常量的位置的影响; 在类或接口中。
俗称的是,接口中定义的所有变量都是public
final
变量,无需特别说明。
一种。 枚举
b。 接口
C。 班级
我记得在“有效Java”一书中对此问题进行了简要讨论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.