 <p>Why are you talking generics here? And why is Sport knowing about all the sports there are?</p> <p>You can do something like below, for starters:</p> <pre><code>public interface IBall { } public class BilliardBall : IBall { } public abstract class Sport { protected abstract IBall Ball { get; } } public class Billiards : Sport { protected override IBall Ball { get { return new BilliardBall(); } } } </code></pre>