簡體   English   中英

從接口訪問子類

[英]Access a subclass from an interface

我有一個名為 Component 的接口的 arraylist。 還有另一個名為 Frame 的 class 擴展組件如下:Component(接口)> AbstractComponent(抽象類)> AbstractContainer(抽象類)> OrganizedContainer(類)> Frame(類)

組件 arraylist 中的所有內容都進入渲染器進行渲染。 我希望能夠從 AbstractContainer class 訪問 Frame object 的方法。 如果不在 Component 接口中聲明方法,這可能嗎?

Class實現了一個接口。 一個 Class擴展了另一個 Class。 一個接口擴展了另一個接口。 這是 java 中的約定,我在您的問題中提到過您說過您的 class 擴展了接口Component

Frame<<concrete class>> extends OrganizedContainer extends AbstractContainer extends AbstractComponent implements Component<<interface>>

現在來回答你的問題。 是否可以從AbstractContainer Class 內部訪問僅在Frame中定義的方法? 對的,這是可能的。 如何? 在父級中,只需鍵入(Frame)this.methodInFrame()並避免其他一些子 class object 當前被this引用,您需要使用instanceof運算符。 所以就像

 if(this instanceof Frame){
     (Frame)this.methodInFrame();
 }

這是一個好習慣嗎? 一點也不,Super class 不應該依賴於它的子類。 這會增加程序中的耦合並導致維護問題。 如果您有或計划有或將來可能有任何更具體的子類怎么辦? 當您修改Frame時,您的超類需要修改,因此您新添加的子類可能需要修改。 這也會導致可能是運行時問題的問題。 當您使用instanceof時,請注意這是一種代碼異味,您必須有充分的理由使用它。

唯一的方法是檢查組件是否為帶有component instanceof FrameFrame類型,然后將組件強制轉換為Frame

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM