java为什么要封装