1. 程式人生 > >Java 中父類怎麼呼叫子類的方法?

Java 中父類怎麼呼叫子類的方法?

父類能呼叫子類的方法嗎?

答:能。

怎麼做?

● 把子類傳遞到父類的有參構造中,然後呼叫。
● 使用反射的方式呼叫,你使用了反射還有誰不能呼叫的?!
● 父類呼叫子類的靜態方法。

案例展示:

package com.ywq;



public class Test2{	
	public static void main(String[] args)
	{
		Son son = new Son();
		Father father=new Father(son);
		father.fun1();
		father.fun4();
	}	
}
class Father{
	public Son son;
	public Father(Son son){		
		this.son=son;
	}	
	public Father() {
		
	}

	public void fun4(){
		//方法3:使用反射的方式呼叫子類方法
		try {
			Class cls=Class.forName("com.ywq.Son");
			Son son=(Son) cls.newInstance();
			son.fun2();
		} catch (Exception e) {
		
			e.printStackTrace();
		}
	}
	public void fun1(){
		//方法1:把子類傳遞到父類的有參建構函式中,然後呼叫。
		System.out.println("我是父類的方法");
		son.fun2();
		
		//方法2:父類呼叫子類的靜態方法。
		Son.fun3();
	}		
}

class Son extends Father{
	
	public static void fun3(){
		System.out.println("我是子類的靜態方法");
	}
	public void fun2(){
		System.out.println("我是子類的方法");
		
	}
	
}

這三種都是父類直接呼叫子類的方法,

      好用不?好用!

      解決問題了嗎?解決了!

      專案中允許使用不?不允許!

我就一直沒有搞懂為什麼要用父類呼叫子類的方法。如果一定要呼叫子類,那為什麼要繼承它呢?搞不懂。其實這個問題可以換個角度去理解,父類建立框架,子類在重寫了父類部分的方法後,再呼叫從父類繼承的方法,產生不同的結果(而這正是模板方法模式)。這是不是也可以理解為父類呼叫了子類的方法呢?你修改了子類,影響了父類行為的結果,曲線救國的方式實現了父類依賴子類的場景,模板方法模式就是這種效果。

讀者可查閱:

注:文字部分摘錄至設計模式之禪,案例展現為本人總結,錯誤或者不足之處請指出。