从接口访问子类

问题描述 投票:0回答:2

我有一个名为Component的接口的数组列表。还有另一个名为Frame的类,它扩展了组件,如下所示:Component(接口)> AbstractComponent(抽象类)> AbstractContainer(抽象类)> OrganizedContainer(类)> Frame(类)

组件arraylist中的所有内容都将被渲染到渲染器。我希望能够从AbstractContainer类访问Frame对象的方法。在不声明Component接口中的方法的情况下是否有可能?

java class hierarchy
2个回答
0
投票

唯一的方法是检查组件的类型是否为带有Framecomponent instanceof Frame类型,然后将该组件转换为Frame


0
投票

A Class implements接口。一个类extends另一个类。接口extends另一个接口。这是Java中的约定,我提到过,因为在您的问题中您已经说过您的类扩展了接口Component

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

现在问您的问题。 AbstractContainerClass是否可以访问仅在Frame中定义的方法?是的,有可能。怎么样 ?在父级中,只键入(Frame)this.methodInFrame()

这是一个好习惯吗?完全没有,超级类不应依赖于其子类。这会增加程序中的耦合并导致维护问题。如果您拥有或计划拥有或将来可能拥有更多的具体子类怎么办?当您修改Frame时,您的超类需要被修改,并且由于您新添加的子类可能需要被修改。同样,这也可能导致运行时问题。

© www.soinside.com 2019 - 2024. All rights reserved.