allora per quanto riguarda la prima istruzione viene invocato il costruttore di a che assegna ad a il metodo calcola ed essendo a=0 di conseguenza stampa 1...(almeno credo che questo sia il ragionamento giusto...)
corretto!

poi per quanto riguarda la seconda istruzione viene usato il metodo calcola ridefinito in class B, quindi essendo a = 0 viene assegnato 2 a b, poi il metodo ritorna b + 1 quindi 3
corretto anche questo.
Quindi a questo punto l'oggetto di tipo B avrà entrambi gli attributi settati giusto?

b=2; (settato all'interno del metodo calcola() ridefinito in B)
a=3; (settato dal metodo calcola())

giusto?

Quindi, come hai detto giustamente prima, la seconda istruzione ritorna 3, e la terza...per forza di cose 2...

quindi...

hai appena scritto che viene assegnato a b il valore 2... quindi... l'hai capito...
concordo!!