昨天跟朋友讨论到一个有趣的问题:java中variable有没有override?
真是惭愧啊,到现在才知道原来java中的override只是针对method来讲的,对于变量是hide.
闲言少叙,先上两段代码:
public class Base {
public int x=1;
public void echo(){
System.out.println(x);
}
}
public class Sub extends Base{
public int x=2;
public static void main(String[] args) {
Sub sb=new Sub();
Base bs=new Base();
sb.echo();
bs.echo();
System.out.println(bs.x+"");
System.out.print(sb.x+"");
}
}
猜猜结果是啥?
是
1
1
1
2
呵呵,可以看到变量并没有override.
如果做一下改变,在Sub里面override echo方法,并且与Base的一模一样,再运行,结果是什么呢?
public class Sub extends Base{
public int x=2;
public void echo(){
System.out.println(x);
}
public static void main(String[] args) {
Sub sb=new Sub();
Base bs=new Base();
sb.echo();
bs.echo();
System.out.println(bs.x+"");
System.out.print(sb.x+"");
}
}
呵呵,结果是:
2
1
1
2
不过话说回来,我觉得除非真的被逼无奈,不然不要在一个hierachy下面定义名字重复的变量,否则很容易出现“潜伏”的问题。