2008-10-27 20 views
18

¿Cuál es el uso exacto de una clase abstracta? ¿No es posible hacer las mismas cosas en una clase ordinaria ya que es una clase abstracta?Uso exacto de la clase abstracta

+0

Ver: http://stackoverflow.com/questions/56867/interface-vs-base-class –

+0

Eche un vistazo a [Template Method Design Pattern] (http://sourcemaking.com/design_patterns/template_method) Creo la clase abstracta no se puede remplazar allí. – rafek

Respuesta

19

Una clase abstracta se utiliza cuando tiene alguna funcionalidad base que desea que hereden las subclases, pero no tendría sentido crear una instancia de la clase base. Por ejemplo, si tiene algo así como una clase base de Forma, puede tener una implementación integrada que pueda ser utilizada por las subclases, así como los métodos de interfaz que desee que implementen las subclases. Sin embargo, probablemente no tendría sentido crear un objeto Shape. Una clase abstracta le da esta funcionalidad. Otro gran ejemplo de uso de clases abstractas es el abstract factory pattern.

24

Usa una clase abstracta para proporcionar una implementación concreta pero no permitir la creación de instancias. Siempre puedes crear una instancia de una clase ordinaria que no tiene sentido si no puede funcionar sola. Al mismo tiempo, una interfaz puede no ser suficiente si hay una implementación concreta que sea idéntica en todas las clases implementadas. Una clase abstracta es suficiente. único contrato, sin aplicación, sin instanciación

  • clase Resumen:

    • interfaz contrato, alguna aplicación, sin instanciación
    • Clase: contrato, la ejecución, la instanciación
  • +0

    cómo es posible contratar en tercera clase. porque el contrato significa la declaración de ese método, que significa "abstracto". Y el compilador obliga a convertir en clase abstracta Por eso, ¿cómo es posible contratar en clase normal. Si mi lógica es incorrecta, por favor hazme la corrección. – devsda

    1

    diferencia de las clases regulares, abstract las clases pueden contener abstract métodos. Actúan de manera similar a los miembros de la interfaz.

    Mientras tanto, pueden hacer casi todo lo demás que las clases regulares puede hacer: se pueden aplicar métodos, contienen campos & tipos anidados, se derivan de otra clase, etc.

    5

    Las clases regulares se requieren para proporcionar implementaciones para todos métodos.
    Las interfaces requieren que no proporcionan implementaciones para todos los métodos.

    Las clases abstractas son el único tipo de clase que le permite tener métodos que contienen una implementación, y tienen métodos que no proporcionan una implementación, pero requieren una clase heredada para proporcionarla.

    El hecho de que pueda agregar métodos sin una implementación es la razón por la que no puede instanciar una clase abstracta: solo puede crear una instancia de algo que tenga implementaciones para todos sus métodos.