Класс реализует интерфейс. Класс расширяет другой класс. Интерфейс расширяет другой интерфейс. Это соглашение в java, и я упомянул, что в вашем вопросе вы сказали, что ваш класс расширяет интерфейс Component
.
Frame<<concrete class>> extends OrganizedContainer extends AbstractContainer extends AbstractComponent implements Component<<interface>>
Теперь переходим к вашему вопросу. Возможно ли из класса AbstractContainer
получить доступ к методу, который определен только в Frame
? Да, это возможно. Как ? В родительском элементе просто введите тип (Frame)this.methodInFrame()
и, чтобы избежать того, чтобы какой-либо другой объект подкласса в настоящее время упоминается this
, вам необходимо использовать оператор instanceof
. так что это вроде
if(this instanceof Frame){
(Frame)this.methodInFrame();
}
Это хорошая практика? Вовсе нет, суперкласс не должен зависеть от своих подклассов. Это увеличивает взаимосвязь в вашей программе и приводит к проблемам с обслуживанием. Что, если у вас есть или планируете иметь или можете иметь в будущем еще какие-то конкретные подклассы? Когда вы изменяете Frame
, ваши суперклассы должны быть изменены, и по этой причине ваши вновь добавленные подклассы могут нуждаться в модификации. Также это приводит к проблемам, которые могут быть проблемами во время выполнения. когда вы используете instanceof
, обратите внимание, что это запах кода, у вас должна быть очень веская причина для его использования.