Java: Как мне вызвать метод, который реализует другой метод в интерфейсе? - PullRequest
1 голос
/ 16 февраля 2020
public interface Directory {

    public void insertEntry(Entry entry, String surname);

Допустим, у меня есть этот метод, который является частью интерфейса Справочника.

public void insertEntry(Entry entry, String surname) {
}

Затем я создаю отдельный класс с именем arrayDirectory, который реализует тот же метод в Directory. Как мне тогда вызвать этот метод в классе arrayDirectory? Потому что я пытался вызвать его в main, но метод должен быть stati c, чтобы сделать это, и это не может быть stati c, потому что тогда он не будет реализовывать метод из интерфейса, и я не разрешается изменять сигнатуру метода для методов в интерфейсе. Пожалуйста, помогите, я не знаю, что делать.

1 Ответ

2 голосов
/ 16 февраля 2020

implements

Определите свой класс как реализующий этот интерфейс. Используйте ключевое слово implements.

Кроме того, в соглашениях Java имена классов начинаются с заглавной буквы. Назовите ваш класс ArrayDirectory, а не arrayDirectory.

public class ArrayDirectory implements Directory 
{
    public void insertEntry(Entry entry, String surname) 
    {
        System.out.println( "Doing insertEntry work." ) ;
        …
    }
}

Полиморфизм

Теперь используйте этот класс, создавая объект через new. Обращайтесь к этому объекту как к интерфейсу , а не к конкретному классу, если вы будете вызывать только методы, определенные в интерфейсе.

Directory directory = new ArrayDirectory() ; 

Этот метод известен как полиморфизм («много форм»). Объект Dog можно назвать более общим Animal. Объект Circle и Rectangle могут называться Shape. InternationalShippingLabel и DomesticShippingLabel могут называться ShippingLabel. Оба класса PreferredCustomer и StandardCustomer могут реализовывать интерфейс Customer.

Dynami c dispatch

Затем вызвать метод этого объекта.

directory.insertEntry( … , … ) ;

Через волшебные c из dynamici c dispatch во время выполнения JVM находит необходимый код в классе ArrayDirectory для выполнения.

Кстати, обратите внимание на соглашения об именах на работе здесь. Имена классов начинаются с заглавной буквы, а объекты (на самом деле, ссылочные переменные) начинаются со строчной буквы. И, к сведению, в именах Java используется полный диапазон символов Unicode (французские акценты, японский и т. Д. c), а не только символы Engli sh ASCII.

Абстрактный класс

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

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