0
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、、和CEF

显然,唯一正确的答案是B和。要使 MyApp与两者建立关系,必须位于相同的继承树层次结构中。这个对吗?我认为如果一个类将对象作为成员,它会自动建立关系。EFHas-AEmployeeHas-A

4

5 回答 5

4

MyApp 没有 Employee,没有定义任何成员。MyApp 有 main 方法,就是这样。根据下面的代码,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());
    } 
}
于 2012-01-02T16:46:40.510 回答
1

要使 MyApp 与 Employee 具有 Has-A 关系,两者都必须位于相同的继承树层次结构中。这个对吗?

这是不正确的。

我认为如果一个类将对象作为成员,它会自动具有 Has-A 关系。

你是对的。重点是,MyApp没有Employee作为会员。

于 2012-01-02T16:47:32.250 回答
1

类是否必须在同一继承树上才能具有 Has-A 关系

不,例如:

class Person{
    // Person has-a name, 
    // where Person is not a String,
    // neither reverse
    private String name; 
}
于 2012-01-02T16:47:38.363 回答
1

为了MyApp与 , 有关系EmployeeEmployee e应该是一个成员变量,而不仅仅是在静态方法中本地实例化。

于 2012-01-02T16:47:43.057 回答
0
E. The code is loosely coupled.

这是不正确的。它与员工类紧密耦合,要松耦合,它必须工作在接口或抽象类上。为了使其松散耦合,代码如下。

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());
    } 
}
于 2012-01-02T17:39:21.323 回答