Diferença entre virtual e abstrato

Virtual vs Resumo

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 haja pequenas diferenças no que isso significa em diferentes idiomas, as palavras-chave Virtual e Abstract fornecem um senso de implementação parcial às entidades às quais se vincula..

Abstrato

Normalmente, as classes abstratas, também conhecidas como Classes base abstratas (ABC), não podem ser instanciadas (uma instância dessa classe não pode ser criada). Portanto, as classes abstratas são significativas apenas se a linguagem de programação suportar herança (capacidade de criar subclasses a partir da extensão de uma classe). Classes abstratas geralmente representam um conceito abstrato ou entidade com implementação parcial ou inexistente. Portanto, as classes Abstratas atuam como classes pai das quais derivam as classes filho, para que a classe filho compartilhe os recursos incompletos da classe pai e a funcionalidade possa ser adicionada para completá-las. Classes abstratas podem conter métodos abstratos. As subclasses que estendem uma classe abstrata podem implementar esses métodos abstratos (herdados). Se a classe filho implementar todos esses métodos abstratos, será uma classe concreta. Mas, se não, a classe filho também se torna uma classe abstrata. O que tudo isso significa é que, quando o programador nomeia uma classe como Resumo, ela está dizendo que a classe estará incompleta e terá elementos que precisam ser concluídos pelas subclasses herdadas. É uma boa maneira de criar um contrato entre dois programadores, o que simplifica as tarefas no desenvolvimento de software. O programador, que escreve o código para herdar, precisa seguir exatamente as definições do método (mas é claro que pode ter sua própria implementação). Em Java e C #, classes e métodos abstratos são declarados usando a palavra-chave Abstract.

Virtual

Métodos / funções virtuais fornecem a capacidade de substituir opcionalmente seu comportamento por uma classe herdada (usando uma função com a mesma assinatura). O conceito de função virtual é importante no cenário a seguir. Suponha que uma classe seja derivada por uma classe filha; então, sempre que um objeto da classe derivada for usado, ele poderá se referir a um objeto da classe base ou da classe derivada. Mas, o comportamento de chamada de método pode ser ambíguo se os métodos da classe base forem substituídos. Portanto, para resolver essa ambiguidade, a palavra-chave Virtual é usada. Se o método estiver marcado como Virtual, a função da classe derivada será chamada (se houver) ou a função da classe base. Por exemplo, em C ++, a palavra-chave Virtual é usada exatamente para esse fim. Em C #, a palavra-chave Virtual é usada de maneira 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 há palavra-chave virtual explícita. Todos os métodos não estáticos são considerados virtuais. 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 Abstrato

Embora Abstract e Virtual sejam duas palavras-chave / conceitos que fornecem um significado de implementação incompleta para suas entidades associadas, elas têm suas diferenças. Os métodos abstratos (que devem ser definidos nas classes Abstratas) não possuem 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 deverão ser implementados, enquanto os métodos virtuais herdados poderão ou não ser substituídos.