Как вы можете вызвать метод в классе Java, не используя его класс? - PullRequest
0 голосов
/ 03 ноября 2019

В ООП я узнал, что мы можем вызывать метод, используя его класс.

Например:

Person person = new Person();
person.methodA(); // calling the method in person class

На основе документов javafx ListView (ссылка) , getSelectionModel () - это метод класса ListView (нормально работает). Но метод selectedItemProperty () - это класс SelectionModel (ссылка)

Как можно вызвать метод selectedItemProperty (), не используя его класс SelectionModel? И из какого класса появился этот метод addListener?

myListView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TodoItem>() {
///  blah blah blah
}
});

Ответы [ 2 ]

2 голосов
/ 03 ноября 2019

MultipleSelectionModel ( ссылка ) расширяет SelectionModel ( ссылка ), в которой реализован метод selectedItemProperty().

selectedItemProperty() возвращаетReadOnlyObjectProperty ( link ) экземпляр, который расширяет ObservableValue ( link ), из которого исходит метод addListener().

Что касается того, как вы можетеВызовите эти методы - так работает наследование. Подкласс (MultipleSelectionModel) наследует все свойства своего суперкласса (SelectionModel). Таким образом, любые методы, определенные в SelectionModel, можно вызывать для экземпляра MultipleSelectionModel.

Концепция ООП для начинающих: что такое наследование?

0 голосов
/ 03 ноября 2019

Когда вы вызываете ListView#getSelectionModel(), вы получаете объект, который является экземпляром SelectionModel, точнее, экземпляром MultipleSelectionModel. Поскольку теперь у вас есть экземпляр MultipleSelectionModel, вы можете вызывать методы, присутствующие в этом классе, включая унаследованные методы. Это означает, что вы можете делать следующее:

listView.getSelectionModel().selectedItemProperty().addListener(yourChangeListener);

Что эквивалентно следующему:

MultipleSelectionModel<T> sModel = listView.getSelectionModel();
ReadOnlyObjectProperty<T> selectedItemProp = sModel.selectedItemProperty();
selectedItemProp.addListener(yourChangeListener);

Как видите, вы используете класс каждого задействованного объекта. Первый, известный как метод цепочки, является просто сокращением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...