私は、Eclipseのネオンを使用しています。
基本的に私は、新しいインターフェイスを作成し、それに異なる基底クラスで見つかった既存のメソッドを追加しています。
私はクラスの持つMyServiceImpl
基本クラスを拡張するGeneralServiceImpl
抽象メソッドとしますdoB
。
私はインターフェイス作成GeneralService
のためにGeneralServiceImpl
しても追加doB
方法:
public interface GeneralService {
abstract void doB();
}
public class GeneralServiceImpl implements GeneralService {
@Override
public void doB() { }
}
}
@Service
public class MyServiceImpl extends GeneralServiceImpl implements MyService {
@Override
public void doC() { }
}
そして、私の新しいインターフェイスは、使用に期待含めるGeneralServiceImpl
方法doB()
public interface MyService {
public void doC();
public void doB();
}
この作品は、私はをクリックしてください日食にdoB()
する方法(doC()
MyServiceでオープン実装(中作品)Ctrl私が利用可能な実装を見つけることができません+左マウスクリック)(下記参照します)
これは、Eclipseのバグですか?私の設定が間違って構築されていますか?私の期待間違ってはいるのですか?
注意
GeneralService
私はそのための実装を開くことができるdoB()
方法私はそれが既存の方法に春のサービスのサポートを追加することでもある必要があるもう一つの理由に注意してください。
見てください、それはバグではありません。
理解することができます(私はよりよく理解するために絵画的表現を行っています):
ことは明らかであるGeneralServiceImpl
クラスのオーバーライドは、doB()
インターフェイスを実装する機能GeneralService
だけでなく、MyServiceImpl
実装は、doC()
その実装のインターフェイスの機能しますMyService
。
また、間の継承関係がありMyServiceImpl
かつGeneralServiceImpl
> - MyServiceImpl
拡張しGeneralServiceImpl
、そうMyServiceImpl
ありdoB(){}
。
今、私たちはここにいることを理解しなければならないのIDE、完了とコンパイラは、静的なビューを使用します。
あなたはランタイムビューをお知りになりたい場合は、その後1は、デバッグモードを使用する必要があります。
私たちはあなたのクラスやインタフェースが設計された方法を参照のであれば、そこの間には直接的な関係はありませんMyService
し、GeneralServiceImpl
そう、eclipse
その認識していないruntime
実装ので、同じことを強調していません。
むしろ、図中の点線で表されたruntime
関係とボイドのこのような実装doB();
機能。
@howlgerのに基づいて詳細情報の追加コメントを:
以下のためのInterface
実装class
宣言されたすべての関数をオーバーライドする必要があります(ない限りabstract
)。そして、IDEとしてEclipse
の機能の実装を検索するときInterface
、それはクラスを実装するには唯一の直接実装を探します。(のためのようにdoC()
それが動作します)。[静的ビュー/コンパイラ]
さて、間を想像MyServiceImpl
&GeneralServiceImpl
私たちは別のクラスを持ってSubGeneralServiceImpl
いるにもoverrides doB()
など
public class SubGeneralServiceImpl extends GeneralServiceImpl {
public void doB() {
//
}
}
そして今MyServiceImpl
拡張SubGeneralServiceImpl
し、SubGeneralServiceImpl
さらに拡張GeneralServiceImpl
。
だから、今でもMyServiceImpl
DOBを()があるが、現在は2 DOB()実装へのアクセス見ることができます:
したがって、静的ビュー(コンパイラ)で、それは限り、絶対に大丈夫ですMyServiceImpl
オーバーライドdoB()
&doC()
IDEはあなたの実装与えることができないため、実行時に来るが使用されようとしているどの実装わからないよう...しかしエクリプスdoB()
しようとしたときに取得MyService
インタフェース。
お役に立てれば。