多態的成員訪問特點

public static void main(String[] args){
	fu f = new zi();
	System.out.println(f.num);//10(取父類)
	/*成員變量:
	編譯看左邊(父類),運行看左邊(父類)
	  成員方法:
	  編譯看左邊(父類),運行看右邊(子類)
	*/
	f.show();//zi..show(取子類)
	
}

class fu{
	int num = 10;
	public void show(){
		System.out.println("Fu...show");
	}
}

class zi extends fu{
	int num = 20;
	@Override
	public void show(){
		System.out.println("zi...show");
	}
}
public static void main(String[] args){
	fu f = new zi();
	System.out.println(f.num);//10(取父類)
	/*成員變量:
	編譯看左邊(父類),運行看左邊(父類)
	  成員方法:
	  編譯看左邊(父類),運行看右邊(子類)
	*/
	f.show();//zi..show(取子類)
	System.out.println("---------------");

	Inter i = new InterImpl();
	i.method();//method...(取子類,因為擔心你的父類方法是抽象方法)
}

interface Inter{
	void method();
}


class InterImpl implements Inter{
	@Override
	public void method(){
		 System.out.println("method...");
	}
}


class fu{
	int num = 10;
	public void show(){
		System.out.println("Fu...show");
	}
}

class zi extends fu{
	int num = 20;
	@Override
	public void show(){
		System.out.println("zi...show");
	}
}
public static void main(String[] args){
	fu f = new zi();
	System.out.println(f.num);
	f.show();//zi..show(取子類)
	f.print();//fu...print(父類)
	//這行進行編譯之後其實會將對象名調用替換成
	//類名調用 --> fu.print()
	zi.print()//靜態方法推薦使用類名調用
	// zi...print
}

class fu{
	int num = 10;
	public void show(){
		System.out.println("fu...show");
	}
	public static void print(){
		System.out.println("fu...print");
	}
}

class zi extends fu{
	int num = 20;
	@Override
	public void show(){
		System.out.println("zi...show");
	}
	public static void print(){
		System.out.println("zi...print");
	}
}