interface A{
int x = 0;
}
class B {
int x = 1;
}
public class Object1 extends B implements A {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("A.x="+A.x);
System.out.println("B.x="+B.x); //報錯,父類中的屬性是實例變量
Object1 c = new Object1();
A a = (A) c;
B b = (B) c;
System.out.println("c.x="+c.x);//報錯,不知道訪問的是父類還是接口中的x
System.out.println("a.x="+a.x);
System.out.println("b.x="+b.x);
}
}
其中System.out.println("B.x="+B.x); 和System.out.println("c.x="+c.x); 這兩句代碼會出現編譯錯誤。
在屏蔽掉這倆句代碼後的輸出爲:
A.x=0
a.x=0
b.x=1
1. A.x=0 -- 爲什麼直接調用接口A的屬性i值正確。
因爲在接口中所有的變量都默認是靜態static的常量(final),不能被修改,否則編譯報錯。
2. System.out.println("B.x="+B.x); -- 報錯,倆種修改方法:
將父類B中的變量定義static靜態類變量:static int x = 1;
先實例化父類B,再調用它的變量值。如System.out.println("b.x="+b.x);