Как метод заглушки интерфейса без тела может иметь эффект? - PullRequest
0 голосов
/ 16 декабря 2018

Здравствуйте, я изучаю Java, и у меня возникает вопрос, озадачивающий меня - некоторые интерфейсы, когда мы реализуем их и переопределяем их пустые методы, даже если мы ничего не помещаем в переопределение, когда мы вызываем метод, который дает эффект.

Вот некоторые конкретные примеры, которые меня смущают:

  • Реализация интерфейса AutoCloseable и переопределение его метода close () позволят нам закрытьobject,

  • То же самое для интерфейса Initializable, если переопределить его для приложений JavaFx, это инициализирует наши элементы управления, и в обоих случаях мы ничего не помещаем в переопределение, но метод имеет действие, я имею в видукак?!

В терминах кода Вот интерфейс AutoClosable

пакет java.lang;

public interface AutoCloseable {

    void close() throws Exception;
}

И когда я его реализую, ясделайте следующее

@Override
    public void close() throws Exception {

    }

, затем в другом классе я смогу использовать этот метод close при попытке перехвата ресурсов, так как это

try(SecurityController security = new SecurityController()) {

} catch (Exception ex) {

} 

Так что здесь я смог закрыть объект дажехотя в интерфейсе или в моей реализации нет ни одного кода

Более подробно здесь приведен код интерфейса Initializable

public interface Initializable {

    public void initialize(URL location, ResourceBundle resources);
}

, и когда я его реализую, я сделаю следующее:

@Override
public void initialize(URL url, ResourceBundle rb) {     

}

и когда яЗапустите приложение JavaFx, этот метод инициализирует мои элементы управления, даже если этот метод пуст как в моем классе, так и в интерфейсе, и я не могу работать с элементами управления, пока этот метод не завершит выполнение, потому что это то, что инициализирует мои элементы управления, но как это делаетпока пусто я не понимаю ?!

Буду признателен, если кто-нибудь сможет мне это объяснить, потому что это меня очень смущает

1 Ответ

0 голосов
/ 16 декабря 2018

Вид по определению, когда вы реализуете интерфейс, экземпляры вашего класса получат возможность делать все, что указывает этот интерфейс.

AutoClosable имеет метод close.Независимо от того, что вы на самом деле пишете в реализации метода, вы всегда можете вызвать close для экземпляра AutoClosable.Но то, что он на самом деле делает, зависит от вашей реализации.

Так что да, реализация AutoClosable (или любого другого интерфейса) с пустыми телами методов действительно дает эффект, а именно - способность вызыватьclose и возможность использовать его в операторе try с ресурсами.Обратите внимание, что это только возможность вызова метода .Означает ли это, что ваш объект на самом деле закрывает то, что должен закрыть?Нет, потому что это зависит от вашей реализации.

...