本帖最后由 xiaofushen 于 2016-3-25 02:36 编辑
我把代码加了一些:
interface HHH {
public static final int x =10;
}
interface JJJ extends HHH {
int x =20;
}
class Demo implements JJJ{
static int x =30;
public static void main(String[] args){
int x =40;
System.out.println(x); //输出40
System.out.println(Demo.x); //输出30
System.out.println(JJJ.x); //输出20
System.out.println(HHH.x); //输出10
}
}
楼上一些回复说就近原则,其实我想楼主应该是知道就近原则,也知道是子类接口常量覆盖了同名的父类接口常量,其实楼主的意思是接口中定义的是常量,为什么还会被修改呢?严格来说,并不能说是覆盖,好像应该说隐藏,见上面多出的代码.接口是不能被阻止继承的.因此常量的体系可能会变得混乱,继承意味着可以覆盖,子接口可以改变父接口中常量的含义,我认为这是很荒谬的,我记得有人说过:"java语言中的边界,不是用来利用的,而是应该避免".接口不是用来干这个的.定义常量正确的做法应该是使用final的class.
一点个人见解,希望能帮到楼主,如有不对,还请各位指正.
|