Virtuāls vs abstrakts
Virtuālā un abstraktā ir divi atslēgvārdi, kas tiek izmantoti lielākajā daļā objektorientēto (OO) programmēšanas valodu, piemēram, Java un C #. Lai gan dažādās valodās ir nelielas atšķirības, tas nozīmē, ka gan virtuālie, gan abstraktie atslēgvārdi daļēji īsteno sajūtu entītijām, kurām tā ir piesaistīta.
Abstrakts
Parasti abstraktās klases, kas pazīstamas arī kā Abstract Base Classes (ABC), nevar instantizēt (šīs klases instanci nevar izveidot). Tātad, abstraktām klasēm ir nozīme tikai tad, ja programmēšanas valoda atbalsta mantošanu (spēja izveidot apakšklases, paplašinot klasi). Abstraktās klases parasti attēlo abstraktu jēdzienu vai entītiju ar daļēju vai bez ieviešanas. Tāpēc abstraktās klases darbojas kā vecāku klases, no kurām tiek iegūtas bērnu klases, tā ka bērnu klasei būs kopīgas vecāku klases nepilnīgās iezīmes, un to pabeigšanai var pievienot funkcionalitāti. Abstraktās klasēs var būt abstraktas metodes. Apakšklases, kas paplašina abstraktu klasi, var ieviest šīs (pārmantotās) abstraktās metodes. Ja bērnu klase īsteno visas šādas abstraktās metodes, tā ir konkrēta klase. Bet, ja tā nav,bērnu klase kļūst arī par abstraktu klasi. Tas viss nozīmē to, ka tad, kad programmētājs izvirza klasi par abstraktu, viņa saka, ka klase būs nepilnīga un tajā būs elementi, kas jāpabeidz mantotajām apakšklasēm. Tas ir jauks veids, kā izveidot līgumu starp diviem programmētājiem, kas vienkāršo uzdevumus programmatūras izstrādē. Programmētājam, kurš raksta kodu, lai iegūtu mantojumu, precīzi jāievēro metožu definīcijas (bet, protams, tai var būt sava ieviešana). Java un C #, abstraktās klases un metodes tiek deklarētas, izmantojot Abstract atslēgvārdu. Tas ir jauks veids, kā izveidot līgumu starp diviem programmētājiem, kas vienkāršo uzdevumus programmatūras izstrādē. Programmētājam, kurš raksta kodu, lai iegūtu mantojumu, precīzi jāievēro metožu definīcijas (bet, protams, tai var būt sava ieviešana). Java un C # abstraktās klases un metodes tiek deklarētas, izmantojot Abstract atslēgvārdu. Tas ir jauks veids, kā izveidot līgumu starp diviem programmētājiem, kas vienkāršo uzdevumus programmatūras izstrādē. Programmētājam, kurš raksta kodu, lai iegūtu mantojumu, precīzi jāievēro metožu definīcijas (bet, protams, tai var būt sava ieviešana). Java un C #, abstraktās klases un metodes tiek deklarētas, izmantojot Abstract atslēgvārdu.
Virtuāls
Virtuālās metodes / funkcijas nodrošina iespēju pēc izvēles ignorēt tās uzvedību ar mantoto klasi (izmantojot funkciju ar tādu pašu parakstu). Virtuālās funkcijas jēdziens ir svarīgs šajā scenārijā. Pieņemsim, ka klasi atvasina bērnu klase, tad, kad tiek izmantots atvasinātās klases objekts, tā var atsaukties uz pamatklases vai atvasinātās klases objektu. Metodes izsaukuma uzvedība var būt neskaidra, ja tiek ignorētas bāzes klases metodes. Tātad, lai novērstu šo neskaidrību, tiek izmantots virtuālais atslēgvārds. Ja metode ir atzīmēta kā Virtuāla, atvasinātās klases funkcija tiek saukta (ja tāda ir) vai arī tiek izsaukta bāzes klases funkcija. Piemēram, programmā C ++ tieši šim nolūkam tiek izmantots virtuālais atslēgvārds. C # virtuālais atslēgvārds tiek izmantots līdzīgi, bet papildus tamatslēgvārda ignorēšana jāizmanto, lai modificētu visas ignorētās metodes. Bet Java valodā nav skaidra virtuālā atslēgvārda. Visas nestacionārās metodes tiek uzskatītas par virtuālām. Virtuālās funkcijas bez ķermeņa tiek sauktas par Pure Virtual funkcijām. Java un C # abstraktās metodes faktiski ir Pure Virtual.
Atšķirība starp virtuālo un abstrakto
Lai gan abstraktie un virtuālie ir divi atslēgvārdi / jēdzieni, kas ar to saistītajām entītijām nodrošina nepilnīgas ieviešanas nozīmi, tiem tomēr ir savas atšķirības. Abstraktajām metodēm (kas jādefinē abstraktajās klasēs) vispār nav ieviešanas, savukārt virtuālajām metodēm var būt ieviešana. Ja abstraktās metodes paplašina konkrēta klase, ir jāievieš visas mantotās abstraktās metodes, savukārt mantotās virtuālās metodes var ignorēt.