接口與繼承 -- 訪問相同變量

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);



發佈了56 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章