Given:
1. public class Team extends java.util.LinkedList {
2. public void addPlayer(Player p) {
3. add(p);
4. }
5. public void compete(Team opponent) { /* more code here */ }
6. }
7. class Player { /* more code here */ }
Which two are true? (Choose two.)
A. This code will compile.
B. This code demonstrates proper design of an is-a relationship.
C. This code demonstrates proper design of a has-a relationship.
D. A Java programmer using the Team class could remove Player
objects from a Team object.
1. public class Team extends java.util.LinkedList {
2. public void addPlayer(Player p) {
3. add(p);
4. }
5. public void compete(Team opponent) { /* more code here */ }
6. }
7. class Player { /* more code here */ }
Which two are true? (Choose two.)
A. This code will compile.
B. This code demonstrates proper design of an is-a relationship.
C. This code demonstrates proper design of a has-a relationship.
D. A Java programmer using the Team class could remove Player
objects from a Team object.
B. This code demonstrates proper design of an is-a relationship. //is-a是继承关系 这里主要是说Team类和Player类的关系 而不是说Team类和LinkedList类的关系,所以我选C。
C. This code demonstrates proper design of a has-a relationship.
D. A Java programmer using the Team class could remove Player
objects from a Team object. //显然不能不能把Player的对象从Team中移走,因为Team类只提供了addPlayer方法,而没有removePlayer方法。
答案,我选A和C。
B 如果说Team类和LinkedList是is-a
C Team与Player是uses–a而不是组合has-a
D 是对的因为Team类继承LinkedList的所以可以remove
所以这里考的是Team和Player的关系吧
答案应该是A和D吧
is-a 是继承 has-a是持有引用,这样的话是has-a: Player p ;public void addPlayer() {
add(p);
}
B,C两个都没指定谁和谁什么关系D: Team 继承的 LinkedList ,肯定可以调用父类的 remove(index) 或者remove(Object) 方法,从team中remove掉player应该是没问题
Team会继承父类的remove(index)方法,而这个方法在删除的时候不管Team里面放的是什么类型都可以删除,因为它根据下表移除,和容器里面存放的什么没有关系,所以这个肯定是可以删除的
编译可以通过,因为我试过了
uses-a比has-a耦合度更低
似乎有关系,The Team has a series of Player[i]s, but it's not a [i]proper design. 如同当年的java.util.Stack (extends Vector),使用者完全可以add/remove之类的方法,来破坏Stack的pop/push/LIFO