多態中的成員特色

   多態中,成員特色
 
    1.成員變量(編譯運行全看父類):
    編譯的時候, 參考父類中有沒有這個變量,若是有,編譯成功,沒有編譯失敗
    運行的時候, 運行的是父類中的變量值
    
     
   2.成員方法( 編譯看父類,運行看子類):
   編譯的時候, 參考父類中有沒有這個方法,若是有,編譯成功,沒有編譯失敗
   運行的時候, 運行的是子類的重寫方法java

    特例:調用靜態成員方法時,運行看父類。緣由:靜態屬於類,不屬於對象。不new對象,也可調用父類的靜態方法,直接用類名調用。測試

父類spa

package Static_user;

public class Fu {

	int a = 1;
	static int b = 1;//靜態變量
	
	public void show1(){
		System.out.println("父類的方法show1");
	}
	
	//靜態方法
	public static void show2(){
		System.out.println("父類的靜態方法show2");
	}
	
}

子類code

package Static_user;

public class Zi extends Fu {
	int a = 2;
	static int b = 2;//靜態變量
	
	public void show1 (){
		System.out.println("子類的方法show1");
	}
	
	//靜態方法
	public static void show2(){
		System.out.println("子類的靜態方法show2");
	}
}

測試類對象

package Static_user;
/*
 * 多態運行中,編譯看誰,運行看誰
 * 編譯都看 = (等號)左邊的父類,父類又編譯成功,沒有編譯失敗
 * 運行時,成員變量,運行的全是父類的
 * 運行時,靜態方法,運行父類的靜態方法
 * 運行時,非靜態方法,運行子類的重寫方法
 * 
 */
public class Test {

	public static void main(String[] args) {
		Fu f = new Zi();
		
		System.out.println("a="+f.a);
		f.show1();
		
		System.out.println("b="+f.b);
		
		/*
		 * 調用的仍是父類的靜態方法
		 * 緣由:靜態屬於類,不屬於對象。不new對象,也可調用父類的靜態方法,直接用類名調用
		 * 對象的多態性,靜態與對象無關
		 */
		f.show2();
		
	}
}

運行結果:編譯

a=1
子類的方法show1
b=1
父類的靜態方法show2
相關文章
相關標籤/搜索