virtual dajesz do metody, gdy chcesz zdefiniować jej istnienie (wręcz zaznaczyć konieczność jej istnienia) a jeszcze nie wiesz jak będzie dokładnie wyglądać. Wtedy jej ciało muszą zdeklarować klasy pochodne.
Klasa Organizm ma metodę live(). Tyle że jeszcze nie wiesz jak ona będzie wyglądać. Możesz ją opisać dopiero w klasach pochodnych:
class Organism{
abstract void live();
}
class Plant extends Organism{
void live(){
photosynthesis();
osmosis();
}
}
class Human extends Organism{
void live(){
breathe();
eat();
}
}
PS. w Javie wygląda to prawie dokładnie tak samo