Diferença entre virtual e abstrato
Virtual vs Abstract
Virtual e Abstract são duas palavras-chave usadas na maioria das linguagens de programação orientadas a objetos (OO), como Java e C #. Embora existam pequenas diferenças no que significa em diferentes idiomas, palavras-chave virtuais e abstratas proporcionam uma sensação de implementação parcial para as entidades às quais ele se conecta.
Resumo
Tipicamente, as classes Abstract, também conhecidas como Abstract Base Classes (ABC), não podem ser instanciadas (uma instância dessa classe não pode ser criada). Assim, as classes abstratas só são significativas se a linguagem de programação suportar a herança (capacidade de criar subclasses de extensão de uma classe). As classes abstratas geralmente representam um conceito ou entidade abstrata com implementação parcial ou não. Portanto, as classes abstratas atuam como classes pai a partir das quais as classes filho são derivadas, de modo que a classe filho compartilhe os recursos incompletos da classe pai e a funcionalidade pode ser adicionada para completá-los. As aulas abstratas podem conter métodos abstratos. Subclasses que estendem uma classe abstrata podem implementar esses métodos (herdados) abstratos. Se a classe infantil implementar todos esses métodos Abstract, é uma classe concreta. Mas, se não, a classe infantil também se torna uma classe abstrata. O que tudo isso significa é que, quando o programador designa uma aula como um Abstrato, ela está dizendo que a classe estará incompleta e terá elementos que precisam ser completados pelas subclasses herdadas. Esta é uma ótima maneira de criar um contrato entre dois programadores, o que simplifica tarefas no desenvolvimento de software. O programador, que escreve código para herdar, precisa seguir as definições do método exatamente (mas é claro que pode ter sua própria implementação). Em Java e C #, as classes e métodos abstratos são declarados usando a palavra-chave Resumo.
Virtual
Os métodos / funções virtuais oferecem a capacidade de substituir opcionalmente seu comportamento por uma classe de herança (usando uma função com a mesma assinatura). O conceito de função virtual é importante no seguinte cenário. Suponha que uma classe seja derivada por uma classe filho, então sempre que um objeto da classe derivada é usado, ele pode se referir a um objeto da classe base ou da classe derivada. Mas, o comportamento do método de chamada pode ser ambíguo se os métodos da classe base forem substituídos. Então, para resolver essa ambiguidade, a palavra-chave virtual é usada. Se o método for marcado como Virtual, a função da classe derivada é chamada (se houver) ou a função da classe base é chamada. Por exemplo, em C ++, a palavra-chave virtual é usada exatamente para este propósito. Em C #, a palavra-chave virtual é usada de forma semelhante, mas, além disso, a substituição da palavra-chave deve ser usada para modificar todos os métodos substituídos.Mas em Java, não existe uma palavra-chave virtual explícita. Todos os métodos não estáticos são considerados virtuais. As funções virtuais sem corpo são chamadas de funções virtuais puras. Em Java e C #, os métodos abstratos são de fato Pure Virtual.
Diferença entre Virtual e Abstract
Embora Abstract e Virtual sejam duas palavras-chave / conceitos que proporcionem um significado de implementação incompleta para suas entidades associadas, eles têm suas diferenças. Os métodos abstratos (que devem ser definidos dentro das classes Abstract) não têm uma implementação, enquanto os métodos virtuais podem ter uma implementação. Se os métodos abstratos forem estendidos por uma classe concreta, todos os métodos abstratos herdados devem ser implementados, enquanto os métodos virtuais herdados podem ou não ser substituídos.