class Employee {
private String name;
void setName(String n) { name = n; }
String getName() { return name; }
}
interface Mungeable {
void doMunging();
}
public class MyApp implements Mungeable {
public void doMunging() { ; }
public static void main(String[] args) {
Employee e = new Employee();
e.setName("bob");
System.out.print(e.getName());
}
}
可能的答案:
Which are true? (Choose all that apply.)
A. MyApp is-a Employee.
B. MyApp is-a Mungeable.
C. MyApp has-a Employee.
D. MyApp has-a Mungeable.
E. The code is loosely coupled.
F. The Employee class is well encapsulated.
在回答上述问题时,我选择了B
,C
,E
和F
显然唯一正确的答案是B
,E
和F
。对于与Has-A
具有Employee
关系的MyApp,两者必须位于相同的继承树层次结构中。它是否正确?我认为如果一个类将对象作为成员,则它自动具有Has-A
关系。
答案 0 :(得分:4)
MyApp没有Employee,没有定义任何成员。 MyApp有主要方法,就是这样。根据以下代码,MyApp has-a Employee
。
public class MyApp implements Mungeable {
public void doMunging() { ; }
private Employee;
public static void main(String[] args) {
Employee e = new Employee();
e.setName("bob");
System.out.print(e.getName());
}
}
答案 1 :(得分:1)
要让MyApp与Employee建立Has-A关系,两者都必须如此 在同一继承树层次结构中。这是对的吗?
这不正确。
我认为如果一个类将对象作为成员自动进行 有一个Has-A关系。
你是对的。点是,MyApp
没有Employee
作为成员。
答案 2 :(得分:1)
类必须位于同一继承树上才能具有Has-A关系
不,例如:
class Person{
// Person has-a name,
// where Person is not a String,
// neither reverse
private String name;
}
答案 3 :(得分:1)
要使MyApp
与Employee
建立关系,Employee e
应该是成员变量,而不仅仅是在静态方法中进行本地实例化。
答案 4 :(得分:0)
E. The code is loosely coupled.
这不正确。它与employee类紧密耦合,因为它松散耦合,它必须在接口或抽象类上工作。为了使它松散耦合,代码将如下。
interface IEmployee{
...
...
}
class Employee implements IEmployee {
...
...
}
public class MyApp implements Mungeable {
public void doMunging() { ; }
//declare interface type
private IEmployee emp;
//use DI to inject an implementation of IEmployee type in MyApp
public MyApp(IEmployee object){
emp = object;
}
public static void main(String[] args) {
emp.setName("bob");
System.out.print(emp.getName());
}
}