考察下面的Book
类:
class Book {
protected String name;
public String getName() {...}
public void setName(String name) {...}
}
这个 Book 类也有name
字段,那么,我们能不能让Student
继承自 Book 呢?
class Student extends Book {
protected int score;
}
显然,从逻辑上讲,这是不合理的,Student
不应该从Book
继承,而应该从Person
继承。
究其原因,是因为Student
是Person
的一种,它们是is
关系,而Student
并不是Book
。实际上Student
和Book
的关系是has
关系。
具有has
关系不应该使用继承,而是使用组合,即Student
可以持有一个Book
实例:
class Student extends Person {
protected Book book;
protected int score;
}
因此,继承是is
关系,组合是has
关系。
©查看原文