インターフェイスONEにはメソッドがA
あり、インターフェイスTWOにはメソッドがありB
ます。どちらのメソッドもクラスに実装されていThree
ます。ここで、ThreeのインスタンスをONEに割り当てますが、それでもB
SECONDのメソッドを呼び出すことはできますか?
これは可能ですが、正しいですか?
インターフェイスONEにはメソッドがA
あり、インターフェイスTWOにはメソッドがありB
ます。どちらのメソッドもクラスに実装されていThree
ます。ここで、ThreeのインスタンスをONEに割り当てますが、それでもB
SECONDのメソッドを呼び出すことはできますか?
これは可能ですが、正しいですか?
あなたがこれを持っていると仮定します:
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
を のインスタンスとして定義するためですA
。new C()
初期化 ( ) に具象クラスを使用していますが、インターフェイスにプログラミングしているため、そのインターフェイスで定義されたメソッドのみが表示されます。
また、One
extendsTwo
の場合、それが可能になります。これは解決策ではないかもしれませんが、私はあなたがそれを行うことができる別の方法を指しているだけです.
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();
割り当てられたクラス/インターフェイスで利用可能なメソッドのみを呼び出すことができることに注意してください。実際のオブジェクトがサポートするメソッドは関係ありません。コンパイラに関する限り、割り当てられた参照とそれに含まれるメソッドのみを確認します。
したがって、あなたの場合、次を割り当てた場合:
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