flm.fly()両方とも同じ答えを私にj.fly()
与えるとき、ポリモーフィズムの利点は何ですか?
利点は
FlyingMachines flm = new Jet();
flm.fly();
戻り値
"Start, Taxi, Fly"
それ以外の
"No implementation"
それがポリモーフィズムです。fly()タイプのオブジェクトを呼び出すFlyingMachineと、それが実際にはaであることがわかり、を出力する間違ったメソッドではなくJet、適切なメソッドを呼び出します。fly()"No implementation"
つまり、タイプのオブジェクトを処理するメソッドを記述し、またはFlyingMachineのようなすべての種類のサブタイプをフィードすることができます。これらのメソッドは常に正しいことを行います。つまり、常に同じことを行うのではなく、適切なタイプのメソッドを呼び出すこと、つまり出力します。JetHelicopterfly()"No implementation".
ポリモーフィズム
あなたの例では、ポリモーフィズムは役に立ちません。
a)とb)は同じコインの両面です。
その方法をお見せしましょう。
コード例
import java.util.ArrayList;
import java.util.List;
import static java.lang.System.out;
public class PolymorphismDemo {
public static void main(String[] args) {
List<FlyingMachine> machines = new ArrayList<FlyingMachine>();
machines.add(new FlyingMachine());
machines.add(new Jet());
machines.add(new Helicopter());
machines.add(new Jet());
new MakeThingsFly().letTheMachinesFly(machines);
}
}
class MakeThingsFly {
public void letTheMachinesFly(List<FlyingMachine> flyingMachines) {
for (FlyingMachine flyingMachine : flyingMachines) {
flyingMachine.fly();
}
}
}
class FlyingMachine {
public void fly() {
out.println("No implementation");
}
}
class Jet extends FlyingMachine {
@Override
public void fly() {
out.println("Start, taxi, fly");
}
public void bombardment() {
out.println("Fire missile");
}
}
class Helicopter extends FlyingMachine {
@Override
public void fly() {
out.println("Start vertically, hover, fly");
}
}
説明
a)MakeThingsFlyクラスは、タイプがすべてのものを処理できますFlyingMachine。
b)このメソッドletTheMachinesFlyは、新しいクラスを追加するときにも変更なしで機能します(!)。次に例を示しPropellerPlaneます。
public void letTheMachinesFly(List<FlyingMachine> flyingMachines) {
for (FlyingMachine flyingMachine : flyingMachines) {
flyingMachine.fly();
}
}
}
それがポリモーフィズムの力です。これを使用して、 open-closed-principleを実装できます。