Sì, aggiungi un campo di questo tipo a una classe derivata, proprio come hai descritto tu. Tutti gli uccelli hanno le ali
È utile considerare come userete questa proprietà. Le persone nuove a OO, e specialmente i vecchi che hanno programmato molto prima dei primi giorni di OO, potrebbero voler scrivere codice come (non in una lingua particolare):
for all Animals a in someListOfAnimals:
print a.name, " has weight of ", a.weight
if a is a Bird,
print " and a wingspan of ", a.wingsize
ma questo è gravemente sbagliato nella progettazione OO. Devi sempre cercare di pensare al giusto livello di astrazione. Il modo giusto sarà qualcosa di più simile a
for all Animals a in someListOfAnimals:
print a.descripion()
e definire un metodo virtuale "description ()" per Animal e per Bird. Il metodo Bird.description (), ovviamente, stamperà le ali insieme alle solite cose. Animal.description () non menziona wingsize.
Nel caso in cui un giorno ti imbatterai in strane specie di uccelli senza ali, non avrai bisogno di creare una gerarchia di classi aggrovigliate. Il mondo reale è pieno di eccezioni. Basta impostare la dimensione dell'ala a zero, o qualche valore falso, o aggiungere un membro di Bolle con le ali.