2013年3月17日 星期日

一個簡單範例解釋多型(Polymorphism)


所有的人(Human),都有體重(weight)與威力(power),且體重等於威力

Human.java
public class Human {
    public double weight = 0;
    
    public double getPower() {
        return this.weight;
    }
    
    public Boolean isEqualToPower(Human h) {
        // 只要是人,都有取得自己威力的 method,叫做 getPower。
        // 但是骨子裡,不同人種 getPower 的方式卻不一定相同。
        // 這就是多型的應用。
        
        return this.getPower() == h.getPower();
    }
}

黑人天生的肌肉就比較強韌,可以發揮體重 1.5 倍的威力。(也可以擁有屬於黑人獨有的行為(black_method))
Black.java
public class Black extends Human {
    public double getPower() {
        return this.weight * 1.5;
    }
    
    public void black_method() {
        // only for black
    }
}

白人天生的肌肉也比一般人強韌些,可以發揮體重 1.2 倍的威力。也可以擁有屬於白人獨有的行為(white_method))
White.java
public class White extends Human {
    public double getPower() {
        return this.weight * 1.2;
    }
    
    public void white_method() {
        // only for white
    }
}

我們黃種人,體重跟威力,跟所有人類一樣,體重就等於威力。(不需要override getPower)
Yellow.java
public class Yellow extends Human {
    public void yellow_method() {
        // only for yellow
    }
}

PolymorphismExample.java
public class PolymorphismExample {
    public static void main(String[] args) {
        Human y = new Yellow();
        Human b = new Black();
        Human w = new White();
        
        y.weight = 12;
        b.weight = 10;
        w.weight = 10;
        
        System.out.println(y.isEqualToPower(w));
        System.out.println(b.isEqualToPower(w));
    }
}

PolymorphismExample.java 可以知道,不同的人種,也可以進行威力的比較。
而從 Human.java 知道比較威力時,我們也只是站在人的立場,使用 getPower 來取得各自的威力。
可是雖然都是人,但是骨子裡的 getPower 卻會依據不同人種有不同的計算方式這就是多型 (Polymorphism)

範例程式下載
PolymorphismExample.zip

2 則留言:

  1. 我是黃種人,但是我可以使出體重的六倍力量。

    回覆刪除