Как вы можете создать экземпляр интерфейса? - PullRequest
0 голосов
/ 17 ноября 2011

В Swing я использую ActionListener или любой другой интерфейс Слушателя.

В общем, я не могу создать объект интерфейса.Если я использую оператор new с любым именем конструктора, объект создается.

У меня проблема с кодом ниже:

jbtOK: это какой-то объект кнопки

ActionListener - это интерфейс.

Как использовать новый метод ActionListener() в addActionListener?

Поскольку объект создан.но я не могу создать объект из интерфейса.

Возможно ли это только во внутренних классах?во внутренних классах я могу создавать объекты интерфейса:

jbtOK.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {

         System.out.println("hi");
       }
     });

Ответы [ 3 ]

3 голосов
/ 17 ноября 2011

с ключевым словом new вы создаете объект в памяти, и, когда вы создаете объектный объект интерфейса, его необходимо реализовать.давайте сравним с явным классом

предположим, что вы определяете класс, который реализует этот интерфейс ActionListener, что вы делаете?

class MyActionListener implements ActionListener{
    // now here you need implement all of the method which defined into the ActionListener interface
}

теперь вы можете использовать этот класс для регистрации прослушивателя для Action следующим образом

jbtOK.addActionListener(new MyActionListener());

это была явная реализация, и, поскольку вы реализуете ее напрямую, она называется классом Anonymous, как вы здесь определили с помощью интерфейса ActionListener

1 голос
/ 17 ноября 2011

Если я понял ваш вопрос, вы не можете использовать методы интерфейса, потому что интерфейс имеет все свои методы как абстрактные (пустые, без реализации), тогда вы должны реализовать все методы, запрошенные вашим интерфейсом.

Например, поскольку вам нужно добавить ActionListener к кнопке, а затем связать ее с действием, вызываемым в методе actionPerformed, вы должны объявить в первых строках вашего кода:

public class your_class implements ActionListener

Если ключевое слово implements необходимо, чтобы указать, что вы реализуете абстрактные методы интерфейса ActionListener или любого другого интерфейса, чтобы использовать эти методы с вашими объектами.

1 голос
/ 17 ноября 2011

http://mindprod.com/jgloss/interface.html#INSTANTIATING:

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

Прочтите также несколько вещей об анонимных классах.

new class-name ( [ argument-list ] ) { class-body }

Это анонимный класс , который вы создаете и передаете в свой метод addActionListener. addActionListener принимает ActionListener в качестве аргумента, поэтому, поскольку вы предоставляете метод actionPerformed, он предполагает, что передаваемый ему анонимный класс является ActionListener.

Попробуйте изменить имя этого метода actionPerformed. Он больше не будет работать, поскольку передаваемый вами анонимный класс не реализует интерфейс ActionListener. Смотрите сообщение об ошибке, полученное компилятором.

...