public abstract class Personagem {
  public abstract Item criarItemUtil();
  // …
}

public class Feiticeiro extends Personagem {
  public Item criarItemUtil() {
    return new Magia(); // Magia é uma subclasse de Item
  }
  // ...
}

public class Sala {
  public void entra(Personagem p) {
     Item it = p.criaItemUtil();
  }
}