Interfaces y clases abstractas

07/10/2005 - 23:35 por Antonio José Yuste López | Informe spam
Hola, tengo una duda con cuando y como utilizar una interface o una clase
abstracta, resulta que..

abstract class P1
{
public abstract void tipo();
}

interface P1
{
public abstract void tipo();
}

y luego...

class prueba : P1
{
public override void tipo();
{
...
}
}

o

class prueba : interface P1
{
public void tipo();
{
...
}
}

podría utilizar tanto la interface como la class en una clase hija? y si
puedo... sería lo mismo con una interface que con una clase...
yo creo que sí pero no estoy seguro de el porque y cuando usar una interface
o una clase abstracta.

GRACIAS.

Preguntas similare

Leer las respuestas

#1 Misael Monterroca
08/10/2005 - 14:59 | Informe spam
Utiliza interfaces cuando desees que tus clases tengan un mismo contrato y
estás siempre implementaran todos los métodos que definas.

interface IEmiteSonido
{
void EmitirSonido();
}

Y por ejemplo

public class Vaca : IEmiteSonido
{
public void EmitirSonido();
{
MessageBox.Show("Muuuuuuuuuuuuuuuuu");
}
}

public class Perro : IEmiteSonido
{
public void EmitirSonido();
{
MessageBox.Show("Guafffff");
}
}


El hablar de clases o métodos abstractos es hablar de "clases parcialmente
implementadas" es decir, además de definir un contrato para todas las clases
que heredaran de dicha clase, tambien podrán contener métodos ya
implementados y es cuando ya podras notar la practicidad de utilizar una
clase abstracta, ya que dentro de ella podras codificar métodos comunes y
con ésto, las clases que heredan solo implementarian su función especifica.
regresando al burdo ejemplo anterior.

public abstract class AbstractEmiteSonido
{
public abstract void EmitirSonido();

//Este método está implementado dentro de tu clase abstracta y será
visible para todas las clases que hereden de ella.
protected void MuestraMensaje(string mensaje)
{
MessageBox.Show(mensaje);
}
}


public class Vaca : AbstractEmiteSonido
{
public void EmitirSonido();
{
this.MuestraMensaje("Muuuuuuuuuuuuuuuuu");
}
}

public class Perro : AbstractEmiteSonido
{
public void EmitirSonido();
{
this.MuestraMensaje("Guafffff");
}
}

Por ahora MuestraMensaje es solo un un MessageBox, pero imaginate cuando
este seá mas código, si bien, podrias crear una tercera clase para poner
este tipo de funciones, no siempre es necesario ya que pueden ser funciones
especificas que no tienen por que aplicar a otros procesos, con esto la
reusabilidad seria exclusiva para éstas clases heredadas.

Esto obiviamente fue un ejemlo muy burdo, pero espero te haya aclarado el
concepto.

Saludos!
Misael Monterroca
http://www.neo-mx.com/blogs/neo-mx/


"Antonio José Yuste López" wrote in message
news:uy$
Hola, tengo una duda con cuando y como utilizar una interface o una clase
abstracta, resulta que..

abstract class P1
{
public abstract void tipo();
}

interface P1
{
public abstract void tipo();
}

y luego...

class prueba : P1
{
public override void tipo();
{
...
}
}

o

class prueba : interface P1
{
public void tipo();
{
...
}
}

podría utilizar tanto la interface como la class en una clase hija? y si
puedo... sería lo mismo con una interface que con una clase...
yo creo que sí pero no estoy seguro de el porque y cuando usar una
interface o una clase abstracta.

GRACIAS.

Respuesta Responder a este mensaje
#2 Robin
26/10/2005 - 04:37 | Informe spam
Ok, hay una gran diferencia entre Clases Abstractas e Interfaces
primero
Las Clases Abstractas son CLASES. Cuando heredas de ellas puedes hacerlo de
una a la vez
En cambio puedes implementar las interfaces que sean necesarias y hacer
compatible una clase con Cualquier Interfaz

por otro lado, Una clase abstracta puede contener codigo en algunos de sus
miembros
pero como esta incompleta, es Abstracta, no s epuede instanciar y hay que
heredar de ella.
Una Interfaz se usaria del mismo modo, no se puede instanciar, sin embargo
puedes hacer compatibles dos clases (por ejemplo), Cliente y Empleado, que
hereden de Persona e implementar en Empleado la Interfaz
IAccionista, permitiendo pasar a Empleado a un metodo
VenderAcciones(IEmpleado i); sin necesidad de agregar a Cliente la
Funcionalidad
de Vender o Comprar Acciones.
Asi el modelo se hace mas consistente y mas limpio

Robin Hernández

"Antonio José Yuste López" wrote in message
news:uy$
Hola, tengo una duda con cuando y como utilizar una interface o una clase
abstracta, resulta que..

abstract class P1
{
public abstract void tipo();
}

interface P1
{
public abstract void tipo();
}

y luego...

class prueba : P1
{
public override void tipo();
{
...
}
}

o

class prueba : interface P1
{
public void tipo();
{
...
}
}

podría utilizar tanto la interface como la class en una clase hija? y si
puedo... sería lo mismo con una interface que con una clase...
yo creo que sí pero no estoy seguro de el porque y cuando usar una
interface o una clase abstracta.

GRACIAS.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida