In the early days the enhanced getter/setter methods were private, but then some of the added features required them to be public. The INVOKESPECIAL bytecode was never changed to account for that.