2011-01-25 5 views
0

スーパークラスのパブリックメソッドを含むように、Javaクラスからインターフェイスを簡単に抽出する方法はありますか。 インタフェースを抽出しようとしているクラスImには、数多くのメソッドを持つ複数のスーパークラスのレイヤがあります。私はそれらの親クラスのそれぞれのためのインターフェイスを必要としません。スーパークラスのパブリックメソッドを含む、Javaクラスからインタフェースを抽出する簡単な方法はありますか?

現在、私はInteliJアイデアIDEを使用しています。インタフェースを抽出するときにのみ、現在のクラスのパブリックメソッドを抽出します。 Uの人がツールやインターフェイスを抽出する簡単な方法を教えてくれるなら、大きな助けになるでしょう。

答えて

1

Eclipseは、 "Extract Interface"リファクタリングでスーパークラスメソッドを提供しません。そして、これは正しいです、なぜならあなたは本当にインターフェイスを実装し、スーパークラスのメソッドを実装すべきではないからです!

あなたはこのような何かしたい:

public interface InterfaceForB { 
    void b(); 
    void a(); 
} 

public class A { 
    public void a(){} 
} 

public class B extends A implements InterfaceForB{ 
    public void b(){} 
} 

をはい、それがコンパイルされます。しかし、それはひどいスタイルだと言われているので、a()メソッドがで実装されているため、Aが実装されているため、Bはインターフェイスを実装していません。

私の強大なアドバイス:IntelliJの提供するリファクタリングを使用し、実際のクラスで実装されているというメソッドをインターフェイスに抽出するだけです。

public class B extends A implements InterfaceForB{ 
    public void b(){} 
    public void a(){ super(); } 
} 

そして今のIntelliJ(とEclipse)インタフェースにあなたがそれを望むように抽出することができます。それはすべてインターフェイスメソッドを実装するように与えられた例えばBを実装します。

0

Eclipseには、そのクラスのメンバ、そのクラスの継承構造(インターフェイスを含む)(およびそれぞれのクラス/インターフェイスのメンバ)を表示できる「タイプ階層」というツールがあります。クラスを拡張/実装するクラスも含まれます。

インターフェイス/スーパークラスを抽出するためのリファクタリングツールもあります。

関連する問題