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.
 

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.

Preguntas similares