以下程序能否正常运行?
interface One{
static int x=11;
}
interface Two{
final int x=22;
}
class Three{
public static final int x=33;
}
public class TestOne implements One,Two{
public void test() {
System.out.println(x);
}
public static void main(String[] args) {
new TestOne().test();
}
}
答:不能正常运行,编写时就会报错,因为不知道时调用one中的test方法还是调用two中的test方法。
修改方案:
public class TestOne implements One,Two{
public void test() {
System.out.println(one.x);
System.out.println(two.x);
}
以下程序能否正常运行?
public class TestOne extends Three implements One,Two{
public void test(){
System.out.println(x);
}
public static void main(String[] args) {
new TestOne().test();
}
}
答:不能正常运行,编写时就会报错,因为当父类中的属性与接口中的常量重名的时候,子类中的x无法分辨属于哪一个(父类还是接口)。
以下程序能否正常运行?
public class TestOne extends Three implements One,Two{
public int x=44;
public void test(){
System.out.println(x);
}
public static void main(String[] args) {
new TestOne().test();
}
}
答:能正常运行,结果为44,这说明只有在子类中定义独有的x成员,才不会报错。