通常,類實現一個接口,和類本身或它的子類中重寫在接口中的方法,如:Java:子類實現接口,但父類覆蓋接口的成員?
定義的接口:
interface Interface {
void fun();
}
1.Parent類重寫接口方法和子類繼承直接:
public class Parent implements Interface{
public void fun(){
}
}
public class Child extends Parent{
}
或者:
2.父類被定義爲一個抽象類,子類覆蓋在接口中的方法:
public abstract class Parent implements Interface{
}
public class Child extends Parent{
public void fun(){
}
}
不過,我也看到一個奇怪的方法來覆蓋接口方法:
3,子類只能實現接口,但覆蓋在接口中的方法由父類:
public class Parent{
public void fun(){
}
}
public class Child extends Parent implements Interface{
}
重寫接口的方法的第三個方法是在機器人框架源代碼很常見的,例如:
public interface ViewParent {
//......
void requestLayout();
ViewParent getParent();
}
public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {
//......
@CallSuper
public void requestLayout() {
//......
}
public final ViewParent getParent() {
return mParent;
}
}
public abstract class ViewGroup extends View implements ViewParent, ViewManager {
//......
}
的方法requestLayout()和的getParent()來自ViewParent,並的ViewGroup實現ViewParent,但爲什麼該方法的實現在父類查看做些什麼呢?
這種設計的原因是什麼?
它不應該被允許的原因是什麼? – EJP
你的第三點與你給出的例子不符(父母沒有在Android例子中實現接口,這是完全正常的)修正你的問題。 –
@pulp_fiction問題的核心是:子類實現一個接口,但超類覆蓋接口的方法。在這個例子中,重點是ViewParent,View和ViewGroup之間的關係。這種相對關係與第三種設計模式一致。 – StrayedKing