class ONE{
  int i = 1;
  int func(){return i;}
}

class TWO extends ONE{
  int i = 2;
  int func(){return -i;}
}

とあった時に

TWO two = new TWO();

とすると
two.i == 2
two.func() == 2

ですが

OEN one = (ONE) two;

とキャストした時

one.i == 1 はまだ解かるのですが
one.func() が2となるのが納得いきません。

なにかこのような使用である論理的な理由がありますか?
アドバイスお願いします。