0% encontró este documento útil (0 votos)
97 vistas4 páginas

Clases y Métodos Abstractos

Las clases y métodos abstractos permiten definir comportamientos comunes en una jerarquía de clases aunque su implementación concreta dependa de cada subclase. Una clase abstracta no puede crear objetos directamente pero sirve de base para clases concretas que deben implementar los métodos abstractos. Esto permite definir interfaces genéricas y comportamientos compartidos sin fijar la implementación.

Cargado por

Israel Morales
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
97 vistas4 páginas

Clases y Métodos Abstractos

Las clases y métodos abstractos permiten definir comportamientos comunes en una jerarquía de clases aunque su implementación concreta dependa de cada subclase. Una clase abstracta no puede crear objetos directamente pero sirve de base para clases concretas que deben implementar los métodos abstractos. Esto permite definir interfaces genéricas y comportamientos compartidos sin fijar la implementación.

Cargado por

Israel Morales
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 4

Clases y Mtodos Abstractos Una clase abstracta es una clase que se introduce slo para que se deriven nuevas

clases de ella, no para que se creen objetos con su nombre. Del mismo modo, un mtodo abstracto es un mtodo que se introduce para que sea redefinido en una clase derivada. Por ejemplo
abstract class GraphObj { int x, y; // La posicin central GraphObj(int ix, int iy) { x= ix; y= iy; } // constructor void Move(int dx, int dy) { x+= dx; y+= dy; } abstract void Paint(Graphics g); // Paint es abstracto }

Esta clase no se puede usar para crear un objeto, por lo que lo siguiente es un error:
GraphObj gf= new GraphObj(10,20); // error

La idea es que slo se pueden crear objetos de clases derivadas de la clase anterior:
class Line extends GraphObj { // x e y se heredan int ix, iy; GraphObj(int aix, int aiy, int afx, int afy) { super((aix+afx)/2, (aiy+afy)/2); ix= aix; iy= aiy; } void Paint(Graphics g) { g.DrawLine(xi,yi,x+(x-xi),y+(y-yi)); } // Move se hereda de GraphObj } // Ahora s! Line line= new Line(0,0, 10,20);

El principio es que se use varias veces la clase abstracta para definir varias otras clases que poseen un conjunto comn de mtodos: Paint y Move.
// Una caja class Box extends GraphObj { int height, width; Box(int lx, int ly, int hx, int hy) { super( ... ); // Ejercicio ... } void Paint(Graphics g)

{ ... // Ejercicio } }

Clases abstractas
Concepto

Hay ocasiones, cuando se desarrolla una jerarqua de clases en que algn comportamiento est presente en todas ellas pero se materializa de forma distinta para cada una. Por ejemplo, pensemos en una estructura de clases para manipular figuras geomtricas. Podramos pensar en tener una clase genrica, que podra llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podran ser Circulo, Poligono, etc. Podra haber un mtodo dibujar dado que sobre todas las figuras puede llevarse a cabo esta accin, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase). Por otra parte la accin dibujar no tiene sentido para la clase genrica FiguraGeometrica, porque esta clase representa una abstraccin del conjunto de figuras posibles. Para resolver esta problemtica Java proporciona las clases y mtodos abstractos. Un mtodo abstracto es un mtodo declarado en una clase para el cual esa clase no proporciona la implementacin (el cdigo). Una clase abstracta es una clase que tiene al menos un mtodo abstracto. Una clase que extiende a una clase abstracta debe implementar los mtodos abstractos (escribir el cdigo) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte tambin en clase abstracta.
Declaracin e implementacin de mtodos abstractos

Siguiendo con el ejemplo del apartado anterior, se puede escribir: abstract class FiguraGeometrica { . . . abstract void dibujar(); . . . } class Circulo extends FiguraGeometrica {

. . . void dibujar() { // codigo para dibujar Circulo . . . } } La clase abstracta se declara simplemente con el modificador abstract en su declaracin. Los mtodos abstractos se declaran tambin con el mismo modificador, declarando el mtodo pero sin implementarlo (sin el bloque de cdigo encerrado entre {}). La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementa los mtodos abstractos de la clase base (en el ejemplo el mtodo dibujar) el compilador genera un error indicando que no se han implementado todos los mtodos abstractos y que, o bien, se implementan, o bien se declara la clase abstracta.
Referencias y objetos abstractos

Se pueden crear referencias a clases abstractas como cualquier otra. No hay ningn problema en poner: FiguraGeometrica figura; Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producir un error si se intenta: FiguraGeometrica figura = new FiguraGeometrica(); Esto es coherente dado que una clase abstracta no tiene completa su implementacin y encaja bien con la idea de que algo abstracto no puede materializarse. Sin embargo utilizando el up-casting visto en el captulo dedicado a la Herencia si se puede escribir: FiguraGeometrica figura = new Circulo(. . .); figura.dibujar();

La invocacin al mtodo dibujarse resolver en tiempo de ejecucin y la JVM llamar al mtodo de la clase adecuada. En nuestro ejemplo se llamar al mtododibujarde la clase Circulo.

También podría gustarte