Aquí está el artículo de MSDN en las clases abstractas, pero yo realmente no lo entiendo…

Cuando debo realmente el uso de clases abstractas? ¿Cuáles son las ventajas del uso de clases abstractas?

  • El artículo de MSDN sobre las clases abstractas es en serio una broma, es triste.
InformationsquelleAutor bala3569 | 2010-04-03

6 Comentarios

  1. 137

    Las clases abstractas son útiles cuando se necesita una clase para el propósito de la herencia y el polimorfismo, pero no tiene sentido crear una instancia de la clase en sí, sólo sus subclases. Ellos son comúnmente utilizados cuando se desea definir una plantilla para un grupo de subclases que comparten algunas comunes de aplicación del código, pero también quiere garantizar que los objetos de la superclase no puede ser creado.

    Por ejemplo, digamos que usted necesita para crear Perro, Gato, Hámster y los Peces de los objetos. Poseen propiedades similares, como el color, el tamaño y número de las piernas así como el comportamiento, para crear una superclase Animal. Sin embargo, ¿de qué color es un Animal? Cuántas piernas hace un Animal objeto tienen? En este caso, no tiene mucho sentido crear una instancia de un objeto de tipo Animal, sino sólo sus subclases.

    Clases abstractas también tiene el beneficio añadido de polimorfismo, permitiendo el uso de la (abstracta) de la superclase del tipo como argumento del método o de un tipo de retorno. Por ejemplo, si usted tenía un PetOwner clase con un tren() método que se puede definir como tomar en un objeto de tipo Animal, por ejemplo, tren(un Animal) como contraposición a la creación de un método para cada subtipo de Animales.

    • El Animal definir la necesidad de que el color, el número de patas, y el tamaño de las propiedades, por lo que al abordar el Gato como un Animal, entonces yo fervientemente esperar Animal para que tenga un color, el número de patas y tamaño. También creo que podría legítimamente aplicar las propiedades en la clase base como hacer lo contrario podría conducir a código duplicado. Las descripciones aquí están un poco atrapados en propiedades, en lugar de los métodos, no habría ningún punto en el Animal la aplicación de un ‘movimiento’ método ya que cada animal puede tener un diferente método de locomoción, pero la definición de la necesidad de un ‘movimiento’ método.
    • La siguiente respuesta también me ayudó a entender qué es una clase abstracta es stackoverflow.com/a/2558588/2188550
    • No debemos usar super clase como un tipo de retorno, ya que es menos específica y esta es una mala práctica. Tipo de retorno debe ser más específico. Si el Gato es el tipo de retorno, a continuación, el Animal no debe ser utilizado como tipo de retorno.
  2. 6

    Por el uso de clases abstractas que son capaces de hacer la clase más genérica.

    Por ejemplo: si Una clase es una clase abstracta y hay clases de la clase B, clase C y clase D extender la clase abstracta Una de estas sub-clases heredará un método que ya se ha declarado en el resumen de la clase, haciendo que el método más genérico.

  3. 4

    De usarlos para las clases que nunca será creado (así que efectivamente no existen), pero desea heredar de ellos para el polimorfismo razones.

  4. 3

    Uso de clases abstractas cuando se definen el comportamiento de una clase en su clase de jerarquía que nunca va a ser utilizado para crear una instancia de un objeto directamente.

    Por lo tanto, pensar en ti mismo como Dios por un momento. Su CBabyBoy y CBanyGirl clases no ser abstracto – como estos son objetos sólidos que se crean. Por otro lado, su CPerson y CAnimal clases SERÍA abstracto – son útiles a partir de una jerarquía de tipos de punto de vista, pero que no siempre va a estar ejecutando CAnimal dingbat = new Animal();

  5. 3

    Richard ha proporcionado un ejemplo eran una clase abstracta tiene ventajas sobre los no-clases abstractas.

    Me gustaría añadir una tabla para elegir entre una clase abstracta y una interfaz. La imagen se puede encontrar aquí.

    Cuando el uso de clases abstractas?

  6. 2

    Básicamente, usted debe usar una clase abstracta, cuando alguna entidad en su jerarquía, lógicamente, tendrá método(s) que no sabe cómo poner en práctica, pero los descendientes de hacer. Hay miles de millones de ‘la vida real’ ejemplos en toda la web, en realidad)

    • En lugar de ‘no sabe’ que realmente debería ser «no puede o no debería». Incluso en la Forma básica de objetos de ejemplo el método de dibujo podría ser implementado como un método vacío, pero debe?
    • Interesante punto de vista), Pero me refiero, que vacía la aplicación no cuenta, por supuesto=)

Dejar respuesta

Please enter your comment!
Please enter your name here