类必须位于同一继承树上才能使它们具有Has-A关系

时间:2012-01-02 16:43:27

标签: java oop scjp

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.

在回答上述问题时,我选择了BCEF

选项

显然唯一正确的答案是BEF。对于与Has-A具有Employee关系的MyApp,两者必须位于相同的继承树层次结构中。它是否正确?我认为如果一个类将对象作为成员,则它自动具有Has-A关系。

5 个答案:

答案 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)

要使MyAppEmployee建立关系,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());
    } 
}