Breve repaso sobre Clases Abstractas e Interfaces
He aquí dos preguntas acerca de Clases Abstractas e Interfaces. Quizás esta información ayude a alguien con su tarea u.u
1) ¿Por qué las Clases Abstractas tienen métodos públicos, privados, protegidos, etc, y pueden usar constructores pero las interfaces no?
Una Clase Abstracta es un “diseño común” que será heredado por unas subclases. No pueden instanciarse porque son clases incompletas: Los métodos faltantes tendrán que ser implementados por las subclases. Sin embargo, son CLASES, y como tales pueden tener atributos y métodos, públicos, privados y protegidos.
Por una razón obvia, los métodos abstractos no pueden ser privados. Como pueden tener atributos y métodos, también pueden tener un constructor para inicializar esos atributos. Ese constructor puede igualmente ser invocado por las subclases.
En cambio, una INTERFAZ es un contrato, una descripción de un conjunto de métodos. Antiguamente sólo se permitían descripciones de métodos en las interfaces. Pero ahora es posible incluir atributos estáticos y finales (y métodos estáticos.) Obviamente, estos atributos son invariables, no hay un estado que alterar, y por tanto no tiene sentido que las interfaces tengan constructor.
2) ¿Cuándo usar una u otra y por qué?
Bueno, las clases abstractas se pueden usar cuando queremos compartir datos y operaciones entre clases conceptualmente relacionadas, mientras que una interfaz es un contrato que puede ser implementado por cualquier clase, incluso clases conceptualmente disímiles entre sí.
Si necesitas herencia múltiple deberás usar interfaces. En java, por ejemplo, no es posible herencia múltiple con clases abstractas.
Y obviamente, si necesitas atributos no estáticos y/o variables, sólo las clases abstractas lo permiten.
P.D: No soy programadora u.u.
2 Comments
One
Yo soy programador y nunca me aclaro xDD
Pingback: