Either types separated in two classes and an abstract class