The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable.  Strategy lets the algorithm vary independantly from the clients that use it.  In the case below, the actual weapon used by the characters will vary, so create an interface, (in this case an actual Java interface but it doesn't have to be) that allows the behavior to change according to the needs of the character.  The behavior can even be changed during runtime, which couldn't happen if the behavior was hardcoded into the Character subclass.

An example of the Strategy Design Pattern follows:

public class Character {
	WeaponBehavior weapon;
	abstract public fight();
	public void setWeapon(WeaponBehavior w) ( weapon = w; } 
	public void useWeapon() { weapon.useWeapon(); }
}

public class Knight extends Character {
	fight() { ... }
}

public interface WeaponBehavior {
	abstract public void useWeapon();
}

public class SwordBehavior implements WeaponBehavior {
	public void useWeapon() { "swing sword" }
}

public class AxeBehavior implements WeaponBehavior {
	public void useWeapon() { "swing axe" }
}