下面的例子是运用多态的一个例子
输出结果为:
package com.interfaces;
public interface FlyBehavior {
public void fly();
}
package com.interfaces;
public interface QuackBehavior {
public void quack();
}
package com.interfaces.impl;
import com.interfaces.FlyBehavior;
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("I can't fly");
}
}
package com.interfaces.impl;
import com.interfaces.FlyBehavior;
public class FlyRocketPowered implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying with a rocket!");
}
}
package com.interfaces.impl;
import com.interfaces.FlyBehavior;
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("I'm flying");
}
}
package com.interfaces.impl;
import com.interfaces.QuackBehavior;
public class MuteQuack implements QuackBehavior {
@Override
public void quack() {
System.out.println("<<Silence>>");
}
}
package com.interfaces.impl;
import com.interfaces.QuackBehavior;
public class Quack implements QuackBehavior {
@Override
public void quack() {
System.out.println("Quack");
}
}
package com.interfaces.impl;
import com.interfaces.QuackBehavior;
public class Squeak implements QuackBehavior {
@Override
public void quack() {
System.out.println("Squeak");
}
}
package com.bean;
import com.interfaces.FlyBehavior;
import com.interfaces.QuackBehavior;
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public FlyBehavior getFlyBehavior() {
return flyBehavior;
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public QuackBehavior getQuackBehavior() {
return quackBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
public void swim(){
System.out.println("All ducks float , even decoys!");
}
}
package com.bean;
import com.interfaces.impl.FlyWithWings;
import com.interfaces.impl.Quack;
public class MallardDuck extends Duck {
public MallardDuck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
@Override
public void display() {
System.out.println("I'm a real Mallard duck");
}
}
package com.bean;
import com.interfaces.impl.FlyNoWay;
import com.interfaces.impl.Quack;
public class ModelDuck extends Duck {
public ModelDuck(){
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
@Override
public void display() {
System.out.println("I'm a model duck");
}
}
package com.test;
import com.bean.Duck;
import com.bean.MallardDuck;
import com.bean.ModelDuck;
import com.interfaces.impl.FlyRocketPowered;
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performFly();
mallard.performQuack();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
输出结果为:
I'm flying
Quack
I can't fly
I'm flying with a rocket!