>>527
君は、二つ参照変数を作ってるでしょ?sprとsubと。
この2つは、別々のオブジェクトを指しているんだよ。
spr.set(10); で、sprが指すオブジェクトの int aを変えても、
subが指すオブジェクトのint aは変わらない。
したがって、
sub.display()
では何も代入されていないa(初期値で0が入ってる)がでる。

(1) spr.set(10); ← sprが指すオブジェクトのaに10を代入
(2) sub.display(); ← subが指すオブジェクトのaを表示(初期値だから0)

(3) sub.subset(10); ← subが指すオブジェクトのaに10を代入
(4) sub.display(); ← subuが指すオブジェクトのaを表示(今度は、(3)で変更されてるので10)

もしも(1)の前に
spr=sub;
と入れると、sprもsubも同じオブジェクトを指すようになるから、今のままでも両方10が出るよ。

あと、
ClsAの
protected int a;
を
static protected int a;
に変えると、今のままでも両方10になる。このあたりは自分で勉強しよう。
なんかすげ-長くなったな・・・