В каких ситуациях методы одного класса могут вызываться для объектов другого?
Каждый класс (и интерфейс) определяет методы, которые могут быть вызваны для него.
Java, являющийся типобезопасным языком, не позволяет вам вызывать метод, написанный для определенного класса, для чего-то, что не является экземпляром этого класса (то, что вы могли бы сделать в Javascript, например, используя bind(iWantThisThis)
).
Невозможно вызывать эти методы в случаях совершенно не связанных классов. Они должны быть из этого класса или из подкласса.
Итак, нет, вы не можете вызвать Text::getText
для экземпляра несвязанного AnchorPane
.
Вы можете вызывать общие методы из общего родительского интерфейса или суперкласса. Например, оба anchorPane.toString()
и text.toString()
будут работать (потому что каждый объект в Java имеет эти методы). Если оба AnchorPane
и Text
реализуют гипотетический интерфейс UIComponent
, возможно, на обоих из них может быть метод getSize()
.
То, что вы ищете, называется делегированием или составлением объекта. Если у вас есть AnchorPane
, который отображает Text
, вы можете дать ему метод, который также называется setText
, которому делегирует вызов метода для экземпляра Text
, содержащегося в AnchorPane
.
class AnchorPane {
private final Text myText;
void setText(String newText){
myText.setText(myText);
}
}
Так что теперь у вас также есть метод setText
для AnchorPane
(но вам пришлось добавить его вручную, чтобы указать, что именно он делает, и он не дает вам ни одного из других методов).