我在java面試中被問到了這個問題,但我無法在任何地方找到答案。在java中實現通用接口的兩個已經擴展的類中避免重複的方法
X Y
| |
A B
Interface I{
m1();
}
A類和B類分別從類X和Y類延長。
X和Y不能更改。 A和B實現接口I和方法m1()在兩者中具有相同的定義。
如何避免重複編寫代碼。
因爲我們可以在java-8接口中定義方法,所以不能使用Java 8。
在此先感謝。
我在java面試中被問到了這個問題,但我無法在任何地方找到答案。在java中實現通用接口的兩個已經擴展的類中避免重複的方法
X Y
| |
A B
Interface I{
m1();
}
A類和B類分別從類X和Y類延長。
X和Y不能更改。 A和B實現接口I和方法m1()在兩者中具有相同的定義。
如何避免重複編寫代碼。
因爲我們可以在java-8接口中定義方法,所以不能使用Java 8。
在此先感謝。
這是一個可怕的問題,而是去了解它是使在任何A.java
或B.java
一個靜態方法(持有M1的功能),並簡單地調用該方法在A#m1
和B#m1
的好辦法。
這比創建另一個類要簡單得多。
A.java
@Override
public void m1() {
methodHelper();
}
public static void methodHelper() {
// Code goes here.
}
B.java
@Override
public void m1() {
A.methodHelper();
}
我什麼加布Sechan不得不說同意。
讓另一個類(Class C)實現接口中定義的m1()方法。
A類和B類都有一個C類的實例。這將允許您使用m類()方法,其中類C實現而不具有類A和類B具有重複的m1()方法。
也許使用代理...:/ – MadProgrammer
您可以創建一個具有m1()函數的類C,並擁有由A和B持有的C實例。當然,假定m1()實現對於A和B來說都是足夠相似的。在這種情況下,你的類層次可能是錯誤的。在現實世界中,我不會花太多時間擔心這一點,這似乎是一個可怕的問題。 –
代表,代表,代表。 – EJP