封装、继承、多态到底是什么?它们在面向对象中起到了什么样的作用呢?