You just answered your own query, if classes are in different packages, then protected members can only be accessed by subclasses, in your example main method is in the same class(demo2) hence can access i.
That's a normal behavior. Remeber this : Subclasses outside the package CAN'T USE A SUPERCLASS REFERENCE to access a protected member (as said at page 36 of the scjp 5 book of Kathy sierra and Bert Bates).
Hope this will help
SCJP 5 (76%)
SCWCD 5 (86%)
"The greatest glory in living lies not in never falling, but in raising every time we fall.".. Nelson Mandela