2017-04-10 8 views
3

Javaのインタビューでこの質問をしましたが、どこでも答えが見つかりませんでした。Javaで一般的なインターフェイスを実装している2つの既に拡張されたクラスでメソッドを重複させないようにする

X Y 
| | 
A B 

Interface I{ 
m1(); 
} 

クラスAおよびクラスBはそれぞれクラスXおよびクラスYから拡張されています。

XとYは変更できません。 AとBはインタフェースIを実装し、メソッドm1()は両方とも同じ定義を持ちます。

重複コードの書き込みを避ける方法。

java-8インターフェイスでメソッドを定義できるため、Java 8は使用できません。

ありがとうございます。

+0

おそらくプロキシを使用する:/ – MadProgrammer

+5

m1()を実行し、AとBの両方で保持されるCのインスタンスを持つクラスCを作成できます。もちろん、m1()の実装を前提としていますAとBの両方が十分に類似しているので動作します。その場合、クラス階層はおそらく間違っています。現実の世界では、私はこれについて心配するのに多くの時間を費やしていないでしょう、これは恐ろしい質問のようです。 –

+3

代理人、代理人、代理人。 – EJP

答えて

2

これはひどい質問ですが、それについて移動する良い方法はA.javaまたはB.javaのいずれかで(M1の機能を保持している)静的メソッドを作成し、単にA#m1B#m1でそのメソッドを呼び出すことであろう。

これは、別のクラスを作成するよりもずっと簡単です。

A.java

@Override 
public void m1() { 
    methodHelper(); 
} 

public static void methodHelper() { 
    // Code goes here. 
} 

B.java

@Override 
public void m1() { 
    A.methodHelper(); 
} 
0

私はゲイブSechanが言いたいことに同意します。

別のクラス(クラスC)は、インターフェイスで定義されたm1()メソッドを実装します。

クラスAとクラスBの両方にクラスCのインスタンスがあります。これにより、クラスAとクラスBを持たないクラスCが重複したm1()メソッドを持つm1()メソッドを使用できます。

関連する問題