tanto abstractos como virtuales se anularán en la clase para niños de lo que sea diferente.¿Cuál es la diferencia entre abstracto y virtual?
¿Es método virtual tener cuerpo y abstracto es solo una firma ????
tanto abstractos como virtuales se anularán en la clase para niños de lo que sea diferente.¿Cuál es la diferencia entre abstracto y virtual?
¿Es método virtual tener cuerpo y abstracto es solo una firma ????
¿Es método virtual tener cuerpo y abstracto es solo una firma ????
Exactamente. El punto es que los métodos virtuales pueden anularse en las clases derivadas, mientras que los métodos abstractos deben omitirse. Del mismo modo, una clase que tiene al menos un método abstracto debe ser abstracta, es decir, no puede crearse una instancia directamente ya que su implementación está (parcialmente) ausente.
Finalmente, cada método abstracto es también virtual por implicación. virtual
básicamente significa que el método se distribuye en el tiempo de ejecución a la clase correcta, por lo que se puede anular para implementar el polimorfismo en tiempo de ejecución.
Como los métodos abstractos DEBEN sobrescribirse, en realidad son un contrato como las interfaces y el código compilaría a menos que los implemente correctamente, por lo que es una forma de que los usuarios implementen el código que deben implementar, especialmente si son perezosos. ¿correcto? – Xaisoft
@Xaisoft Correcto, pero los métodos virtuales (no abstractos) también forman un contrato ya que un contrato es desde la perspectiva de usar clases (= clientes). Todo lo que es importante es que un cliente puede usar las funciones de una clase que anuncia. –
Estoy de acuerdo, pero lo que quise decir es que si declaras un método virtual, un cliente no tiene que implementarlo aunque lo haga. También un método virtual puede tener un comportamiento predeterminado. Un cliente tiene que implementar un método abstracto y no puede tener un comportamiento predeterminado. Parece que la única razón por la que elegirías la ruta abstracta versus la ruta virtual era si realmente querías aplicar un método para implementarlo y poner la responsabilidad en el cliente. – Xaisoft
Resumen significa que DEBE anularlo. Virtual significa que PUEDE anularlo. Más o menos.
Agregando a eso: con los métodos abstractos en su clase, toda su clase será abstracta, lo que significa que no puede crear instancias de esta clase, solo de subclases derivadas no abstractas. – dbemerlin
Estoy de acuerdo con ambas respuestas aquí, así que no las repetiré. Pero aquí hay un enlace que podría ayudar.
Como acotación al margen, métodos parciales, en contraste con los métodos abstractos, le permiten crear métodos sin implementaciones que no necesitan ser anulado. – Brian