Java - Clase Abstracta
Concepto
Clases especialessimilares a lasinterfaces
Características
-
Una
clase abstractapuede o no incluirmétodos abstractos -
Permite la
implementaciónde losmétodosen laclase abstractacomo si fuera unaclase concretasiempre que esos métodos no lleven en modificadorabstract-
Métodos abstractosno están implementados y lleva el modificadorabstract-
Tenemos que proporcionar una implementación en la
subclase hijaque la extienda mediante el uso del modificadorextends -
Métodos abstractos
implementadospor lassubclasesoclases hijasque heredan de laclase abstracta -
No permiten el uso del modificador
finalen su declaración//ERROR del compilador → illegal combination of modifiers: abstract and final abstract final void getShow();
-
-
-
Ejemplo básico de un
método abstracto
// Método Abstracto
public abstract void metodoAbstracto();
}
-
Las
clases hijasqueheredende laclase abstractaserán quiénes puedancrearlos objetos -
Pueden tener
métodos concretosMétodoscon unaimplementación específica
-
Pueden tener
atributos/variablesdeclase- Accedidas desde las
subclases hijasy también pueden ser protegidas mediantemodificadores de acceso
- Accedidas desde las
-
Pueden tener
constructores- Utilizados para inicializar los
atributos/camposde laclase
- Utilizados para inicializar los
-
Puede ser
extensiónde otraclase- Una
clase abstractapuedeextenderotra clase concreta oclase abstractaque heredan losatributosymétodosde laclase padre
- Una
-
Una
clase abstractapuede declarar métodos con el modificadorfinal- Significa que no se pueden invocar e implementar en sus
subclasesa partir de ella
- Significa que no se pueden invocar e implementar en sus
-
Pueden contener
métodos estáticos- Pertenecen a la
clase concretay no a unobjetode laclase abstracta
- Pertenecen a la
-
Pueden ser utilizadas en
polimorfismo-
Una
clase abstractapuede ser util enpolimorfismoya que lassubclasespueden sertratadascomoobjetosde laclase abstracta -
Significa que una
variabledetipo clase abstractapuedehacer referenciaa unobjetode una de sussubclasesy pueden utilizarmétodosde laclase abstractaenobjetosde sussubclases -
Pueden ser
utilizadascomoclases de utilidad- Una
clase de utilidades la que puede contenermétodos estáticosútiles para variasclases
- Una
-
-
Las
clases abstractases unaclaseque se utiliza como una plantilla para crearsubclasesmás específicas- Pueden
implementartodos losmétodosheredados de lasinterfaces
- Pueden
-
Una
clase abstractapuede implementarvarias interfacesa la vez
public abstract class MiClase implements Interface1, Interface2, Interface3 {
// Aquí va el código de la clase abstracta
}
Estructura básica
-
No permiten
instanciar/crear objetosdesde la propiaclase abstractapero si se puedencrear objetosdesde susclases hijaslas cuales descienden de la propiaclase abstracta -
No sepuedeninstanciardirectamente desde laclase abstractapero puede tenermétodos abstractosymétodos implementados -
Cuando una
clase abstractaes unasubclaseoclase hijade otraclase abstracta- La
subclase abstractaproporciona implementaciones para todos losmétodos abstractosen suclase principal
- La
Los elementos del tipo abstracto
→ TE DICEN QUE HACER pero NO COMO HACERLO
Esa tarea las realizarán las clases hijas que desciendan de la clase abstracta
// Modificador de clase para convertirla en una clase abstracta
// ↓
public abstract class GraphicObject {
// • Espacio para declara atributos/campos
// • Espacio para declara métodos no abstractos
// Método abstracto
abstract void draw();
}
Atributos : Clase Abstracta
-
Permite
declarar campos/atributosde instancia-
Permiten el uso de
modificadores-
public -
protected -
private
-
-
Permite
atributosdel tipoCONSTANTES-
Variables definidascon el modificadorstatic final -
Esta constante
nunca modificara su valor originalen la ejecución del programa
-
-
public static final int PI = 3.14159265358979323846;
Métodos : Clase Abstracta
-
Permite el uso de los
modificadores-
public -
protected -
private
-
-
Pueden contener
métodos de instanciacon o sin implementación-
Métodos
sin implementación-
Se utilizan cuando
-
No sabemoslaimplementaciónque necesitara elmétodoconrespetoa su desempeño dentro del programa -
Se
implementarámás adelante laoperación/acciónque tenga que realizar losmétodos abstractosen las clases hijas que hereden de la clase abstracta-
Las clases hijas tanto
(abstractas como especificas)serán quienes implementen lo que aún se desconoce que deben de hacer elmétododentro del programaabstract void makeSound();
-
-
-
-
Métodos
con implementaciónpublic void (int newX , int newY){ // ... Implementación del método ... }
-
-
Pueden contener
métodos de clasecon o sin implementaciónabstract static void makeSound(String sound);-
Sabemos que tarea/acciones tienen
que realizar- Por ello se implementan en la misma
clase abstractapara que lasclases hijasque hereden estaclase abstractapuedan invocarla e implementarla
- Por ello se implementan en la misma
-
Ejemplo : Clase Abstracta
/**
* Clase Básica Abstracta
*/
public abstract class ClaseAbstractaEjemplo implements InterfaceEjemplo{
. . .
}
Modificador abstract
-
Si una
clasecontiene unmétodo abstractose le añade el modificadorabstractpara convertirla en unaclase abstracta-
Cuando declaremos un
método abstractono lo implementaremos- Solo declararemos la cabecera con el punto y coma al final
-
-
Una clase es
abstractanecesita serextendidapor lo que no puede ser tener el modificador final-
Utilizar el modificador
finalNo permite que sea extendidapor lasclases hijasde esta lo cual pierde la posibilidad de la herencia e implementación
-
-
Cuando una
clase abstractaes una subclases proporcionan implementaciones para todos losmétodos abstractosen suclase principalsino es así la subclase se declaraabstracta
Ejemplo : Métodos Abstractos
public abstract int getValor();
public abstract void moveTo(double deltaX , double deltaY);
-
Si una
clase hijahereda de unaclase abstractase tiene que indicar con la palabra claveextends- Esta clase heredará todos los atributos y métodos tanto implementados como sin implementar de la clase abstracta
/**
* Clase Básica Abstracta
*/
public class ClaseHija extends ClaseAbstractaEjemplo {
}
- Solo se puede heredar de una clase Padre o abstracta y se puede implementar de tantas interfaces se necesite
/**
* Clase Básica Abstracta
*/
public class ClaseHija extends ClaseAbstractaEjemplo implements InterfaceEjemplo1 , InterfaceEjemplo2 {
// . . . Implementación de la clase Hija
}
Implementar Clase Concreta y Varias Interfaces a la vez desde la Clase Abstracta
-
Puede extender
"extend"de una solaclaseseaclase abstractaoclase concreta-
No permiten la herencia multiple
- Sólo puede tener una
superclase directa
- Sólo puede tener una
-
Ejemplo
public interface Interface1 {
void metodo1();
}
public interface Interface2 {
void metodo2();
}
public abstract class MiClase implements Interface1, Interface2 {
// La clase abstracta debe implementar todos los métodos declarados en las interfaces
public void metodo1() {
// Código de la implementación del método 1
}
public void metodo2() {
// Código de la implementación del método 2
}
}
// Una Clase Concreta que extiende de MiClase debe implementar cualquier método abstracto adicional
public class ClaseConcreta extends MiClase {
public void metodo3() {
// Código de la implementación del método 3
}
}
Explicación
-
MiClasees unaclase abstractaque implementa lasinterfaces Interface1yInterface2- Debe proporcionar una
implementaciónde los métodosmetodo1ymetodo2
- Debe proporcionar una
-
ClaseConcretaes unaclase concretaque extiende deMiClase -
Como
MiClasees unaclase abstracta`ClaseConcretadebeimplementarcualquiermétodo abstractoadicional que no esté implementado enMiClase
-
ClaseConcretaimplementa el métodometodo3
Resumen
-
Las
clases abstractasimplementan algunosmetodospara lasclases hijasosubclasespara que puedan invocarlos y usarlos-
Crean sus propios
metodos abstractossin implementaciónpublic abstract int getNumber();
-
-
Las
clases abstractasson una especie defabricas de estructuras de métodosalgunos con o sin implementación-
Otras clases descendientes
subclaseslas extiende mediante la implementación para darle unafuncionalidad especificasegún la necesidad o requisitos del programa- Como una
plantillapara crearsubclasesmás específicas
- Como una
-
Contiene
atributos,constructores,extenderotrasclases hijasosubclases -
Puede declarar los
métodoscomofinalsiempre que no seanabstractos -
Contener
métodos estáticospara ser utilizados en elpolimorfismo -
Puede ser utilizada como
interfaceque contiene métodos con y sin implementar -
Se utiliza como
clase de utilidad
-
Deja un comentario