¿Puede una clase abstracta tener solo firmas de métodos sin implementación como interfaces?

Al igual que las interfaces, ¿puede una clase abstracta tener solo firmas de métodos sin implementación? En caso afirmativo:

  1. ¿En qué se diferencian las clases abstractas de las interfaces?
  2. ¿Cómo puede otra clase, que tiene una clase abstracta como clase base, implementar el cuerpo de los métodos de la clase base?

preguntado el 04 de julio de 12 a las 07:07

Tengo una confusión sobre si la implementación es opcional u obligatoria. -

Quieres decir Can an abstract class have "only method signature" as interfaces without implementation? or Can an abstract class "have only method signature" as interfaces without implementation?? Decidí eliminar mi respuesta debido al título confuso. -

@AlvinWong: Eso es lo que quiere decir, y es realmente confuso debido a la forma en que está redactado en este momento... -

Ustedes me han confundido aún más. Creo que me refería a este último. -

La regla general: siempre use interfaces a menos que tienen utilizar clases abstractas. Las interfaces permiten "herencia múltiple", puede crear objetos que hablen múltiples interfaces. Las clases abstractas complican más las cosas, pero a veces pueden ser útiles cuando es conveniente implementarlas. algo pero no todos los de la clase abstracta. -

8 Respuestas

Una clase abstracta puede contener implementaciones, pero no necesariamente. Esto es una cosa que lo hace diferente de las interfaces.

abstract class classA
{
    abstract public void MethodA();

    public void MethodB()
    {
        Console.WriteLine("This is MethodB inside ClassA");
    }
}

class classB : classA
{

    public override void MethodA()
    {
        Console.WriteLine("This is MethodA inside class B");
    }
}

Si implementa un método en la clase base abstracta y desea poder anularlo más tarde, debe declarar el método como virtual.

virtual protected void MethodC(){
  //this can be overridden
}

Respondido 04 Jul 12, 08:07

en Java:

q1: La clase abstracta puede contener definiciones de métodos Y métodos normales, mientras que una interfaz no puede.

q2: de http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

//this is the abstract class
public abstract class GraphicObject {
  abstract void draw();
}

//this is the implementation 
class Rectangle extends GraphicObject {
  void draw() {
    ...
  }
}

Respondido 04 Jul 12, 07:07

Al igual que las interfaces, ¿puede una clase abstracta tener solo una firma de método sin implementación? En caso afirmativo:

Sí, pero también puede tener implementación...

También puede tener la implementación del método en el abstract clase diferente interfaces, pero no puede crear una instancia de un abstract class

Interfaces y clases abstractas

Clase abstracta versus interfaz

Respondido el 20 de junio de 20 a las 10:06

Respuesta incorrecta ... Una clase abstracta solo puede tener una firma de método sin implementación ... - tiburón de acero

@Asif Si "Puede tener" que cómo respondió "No". Esto significa que una clase abstracta debe tener implementación. - RKh

@ user935439: Supongo que estaba confundido por la redacción de la pregunta (al igual que yo). Esto sigue siendo correcto incluso si el "No" es incorrecto. Es la única respuesta que establece claramente que una clase abstracta puede contener métodos abstractos y de implementación: Ed s.

Creo que ustedes están confundidos con mi redacción. por favor, eche un vistazo a la actualización. - Asif Mushtaq

@ user935439, una clase abstracta puede tener implementación de método, - Habib

Al igual que las interfaces, ¿puede una clase abstracta tener solo una firma de método sin implementación?

. Clase abstracta puede tener implementación del método.

¿En qué se diferencia de la interfaz?

Las variables declaradas en una interfaz son, por defecto, finales. Una clase abstracta puede contener variables no finales.

Los miembros de una interfaz son públicos de forma predeterminada. Una clase abstracta puede tener los sabores habituales de los miembros de la clase, como privado, protegido, etc.

La interfaz es absolutamente abstracta y no se puede instanciar; Una clase abstracta tampoco se puede instanciar, pero se puede invocar si existe un main().

En comparación con las clases abstractas, las interfaces son lentas ya que requieren una indirección adicional.

Consulte los siguientes enlaces:

http://forums.asp.net/t/1240708.aspx/1

http://java.sys-con.com/node/36250

http://www.codeproject.com/Articles/11155/Abstract-Class-versus-Interface

Respondido 04 Jul 12, 08:07

No uses tanta negrita por favor. Y use el marcado de comillas en bloque en lugar del código uno cuando esté resaltando comillas. - fabricio matte

¿No puedes tener una clase abstracta sin implementación? - kirk broadhurst

@KirkBroadhurst Sí. Podemos tener una clase abstracta sin implementación. - Kalai Selvan Ravi

@Kirk Broadhurst, sí, puede tener una clase abstracta sin implementación: MaVRosCía

@MaVRoSCy Esta respuesta dice no no podemos - kirk broadhurst

  1. La interfaz es una clase completamente abstracta,
    Significa solo firmas, sin implementaciones, sin miembros de datos.
    Por otro lado, la clase abstracta por definición necesita al menos un método abstracto.
    También puede tener implementaciones. Y también puede contener miembros de datos que se heredarán a sus herederos.
  2. El heredero necesita implementar el método abstracto con la misma firma para poder implementarlo

Respondido 04 Jul 12, 09:07

en JAVA Sí,

  1. si usa la clase abstracta de esta manera, entonces no hay diferencia entre la interfaz y la clase abstracta. lo que la clase abstracta de dosis realmente importa es que puede ofrecer una implementación común que espera ser heredada por la subclase, eso es lo que la interfaz no puede hacer.

  2. sí, como dije, esa clase abstracta se comporta de la misma manera que la interfaz, simplemente puede anular los métodos en la subclase

Por ejemplo:

public abstract class AbstractClassWithoutImplementation {

public abstract String methodA();

}

public class Implementation extends AbstractClassWithoutImplementation {

@Override
public String methodA() {
    // TODO Auto-generated method stub
    return "Yes";
}

public static void main(String[] args){
    Implementation im = new Implementation();
    System.out.println(im.methodA());
}

}

Respondido 04 Jul 12, 07:07

Una clase abstracta es una clase que no puede ser instanciada. Está entre una clase concreta (totalmente implementada) y una interfaz (nada implementada).

Puede contener miembros regulares (variables, métodos, etc.) que están completamente implementados.

También puede contener miembros abstractos que no están implementados. Cualquier miembro que no esté implementado, por ejemplo, la firma de un método, debe marcarse como abstracto.

Entonces, para responder a sus preguntas:

Al igual que las interfaces, ¿puede una clase abstracta tener solo una firma de método sin implementación?

Su redacción no es lo suficientemente clara como para dar una respuesta de sí o no. Una clase abstracta puede tener métodos implementados y puede tener métodos abstractos que no están implementados y que deben marcarse como abstract. Lo no pueden tienen métodos sin implementación a menos que estén marcados abstract.

En caso afirmativo: ¿En qué se diferencia de la interfaz?

Porque permite la implementación de miembros.

¿Cómo otra clase, para la cual esta clase abstracta actúa como clase base, puede implementar el cuerpo de ese método?

Simplemente necesita implementar todos los miembros abstractos.

public abstract class A
{ 
    public abstract void Test();
}

public class B : A
{
    public void Test(){ return; }
}

Respondido 04 Jul 12, 07:07

Like Interfaces, can an abstract class have only method signature without implementation? If yes:

Sí, An abstract la clase puede tener todo abstract incluso si tiene un solo método abstracto, debe ser abstract.Puedes declarar una clase como abstract incluso si no tiene ninguna abstract método.

How it differs from Interface?

En la interfaz TODOS los métodos son abstract public apostar en la clase Abstracta no es necesario. Por favor, lea sobre Interfaz vs Clase abstracta

How another class, for which this Abstract Class is acting as a base class, can implement the body of that method?

Si BaseClass es abstracto y ChildClass está extendiendo la clase Base que puedes implementar abstract método en ChildClass de lo contrario hacer ChildClass abstractambién

public class ChildClass extends BaseClass{

void display(){

    /// Your Implementation here
}

}

abstract class BaseClass{

abstract void display();
}

Respondido 04 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.