java继承与聚合的区别