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にはメインメソッドがあります。それだけです。以下のコードに従って、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が従業員と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 に答える