Tengo una entidad que tiene info1 o info2 dependiendo de su tipo, pero solo se debe completar una de estas informaciones. Estas informaciones tienen propiedades absolutamente diferentes. Entonces mi entidad se ve así:
public class SomeEntity { private SomeEntityType type; private Info1 info1; private Info2 info2; }Entonces, mi pregunta es ¿está bien crear alguna información de clase abstracta vacía y heredar Info1 e Info2 de ella? (Ya que creo que la cantidad de tales clases de información puede crecer y tendré que agregar todas esas informaciones a SomeEntity)
public class Info1 extends Info { /* some properties */ } public class Info2 extends Info { /* some properties */ } public class SomeEntity { private SomeEntityType type; private Info info; }En una palabra, sí, lo es. Sin embargo, puede ser más idiomático usar una interfaz vacía y hacer que Info1 e Info2 la implementen en lugar de extender una clase vacía.
Sí, claro. Por eso existe la clase abstracta. Puede crear información de clase abstracta y escribir algunos métodos abstractos. Vas a implementar esos métodos en las clases Info1 e Info2.
Ejemplo
public abstract class Info { abstract void getInfo(); } public class Info1 extends Info { void getInfo() { System.out.println("This is Info 1"); } } public class Info2 extends Info { void getInfo() { System.out.println("This is Info 2"); } }Como puede ver, implementé métodos de manera diferente en Info1 e Info2.