前面我們大概講解了Java中的繼承,這裏有一個很重要的知識點,比如:
class Person {
public void doJob() {
System.out.println(“person do job”);
}
class Student extends Person {}
class Worker extends Person {}
那麼,當基於student或者worker生成對象時,可以寫成
Person student = new Student()
Person worker = new Worker()
這裏涉及到一個知識點:向上轉型,即子類可以把類型向上轉爲父類。這個點很重要,也是Java如此靈活的一個原因,後邊涉及多態再詳細展開。
本節重點講一下多態
何爲多態,也可以稱爲後期綁定,也就是上邊的向上轉型,在Java的運行期(後期),父類引用(Person student)指向(=)子類對象(new Student())。
這個有什麼用處呢,用處大了。看下邊的代碼:
public class Factory {
private Person person;
public void setPerson(Person person){
this.person = person;
}
public doSpecialJob(){
person.doJob();
}
工廠類通過組合的方式包含了Person類,然後有一個doSpecialJob方法,讓Person幹活(doJob方法),這裏由於向上轉型的存在,也就是後期綁定或者多態的存在,注意多態(後期綁定)是向上轉型的實現。工廠類中的Person可以傳入一個student對象也可以傳入一個worker對象,假如沒有多態,那起碼你要實現兩個Factory類,一個包含了Student類,一個包含了Worker類。
有了後期綁定,你就可以在某種層面上(Factory類中)只和基類(Person)打交道了。而不用去關注基類具體指向了哪個子類對象。
下面我們來總結一下多態的好處:
1、可擴展性,Factory類中不需要改變任何代碼,只需要傳入的Person類被不同的子類繼承即可。