0

インターフェイスONEにはメソッドがAあり、インターフェイスTWOにはメソッドがありBます。どちらのメソッドもクラスに実装されていThreeます。ここで、ThreeのインスタンスをONEに割り当てますが、それでもBSECONDのメソッドを呼び出すことはできますか?

これは可能ですが、正しいですか?

4

3 に答える 3

5

あなたがこれを持っていると仮定します:

public interface A
{
    public void methodA();
}

public interface B
{
    public void methodB();
}

public class C implements A,B
{
    public void methodA(){...}
    public void methodB(){...}
}

これを行うことができるはずです:

A a = new C();
a.methodA();

しかし、これではありません:

a.methodB()

一方、これを行うことができます:

B b = new C();
b.methodB();

しかし、これではありません:

b.methodA();

編集:

これは、 objectaを のインスタンスとして定義するためですAnew C()初期化 ( ) に具象クラスを使用していますが、インターフェイスにプログラミングしているため、そのインターフェイスで定義されたメソッドのみが表示されます。

于 2013-02-15T14:17:08.907 に答える
0

また、OneextendsTwoの場合、それが可能になります。これは解決策ではないかもしれませんが、私はあなたがそれを行うことができる別の方法を指しているだけです.

interface Two
{
void a();
}

interface One extends Two 
{
void b();
}

class Three implements One
{
@Override
public void b() {}

@Override
public void a() {}
}

その後、あなたが持つことができます

One one = new Three();
one.a();
one.b();
于 2013-02-15T14:28:57.063 に答える
0

割り当てられたクラス/インターフェイスで利用可能なメソッドのみを呼び出すことができることに注意してください。実際のオブジェクトがサポートするメソッドは関係ありません。コンパイラに関する限り、割り当てられた参照とそれに含まれるメソッドのみを確​​認します。

したがって、あなたの場合、次を割り当てた場合:

Three three = new Three(); // all of the methods in One, Two and Three (if any) can be invoked here
One one = three;    // Only the methods on One can be invoked here
Two two = three;    // Only the methods on Two can be invoked here
于 2013-02-15T14:39:03.937 に答える