2017-01-30 6 views
1

Я попал в блокнот в своем коде. это класс в руке.Что значит «должен реализовать наследуемый абстрактный метод java.awt.event.ActionListener.actionPerformed (java.awt.event.ActionEvent)» означает?

public class StartRoom extends Room implements ActionListener { 

    JButton buttonTwo; 

    public StartRoom() { 
     start(); 
     buttonOne = new JButton("Go to door."); 
     buttonTwo = new JButton("Look at skeleton."); 
     label = new JLabel("You walk into the dungeon, the room is covered with vines. There is a skeleton sitting near the northern door. What do you do?"); 
     panelOne.add(label); 
     panelOne.add(buttonOne); 
     buttonOne.addActionListener(this); 
     buttonTwo.addActionListener(this); 
    } 

    class MyActionListener implements ActionListener { 
     @Override 
     public void actionPerformed(java.awt.event.ActionEvent ae) { 

     } 
    } 

    public static void main(String[]args) { 
     new StartRoom(); 
    } 
} 

Это говорит о том, что тип StartRoom должен реализовать унаследованный абстрактный метод java.awt.event.ActionListener.actionPerformed(java.awt.event.ActionEvent) на линии пять, но я не могу понять, что это спрашивает!

+1

Чтобы вы унаследовали абстрактный метод 'actionPerformed (ActionEvent)' от ActionListener. Я думаю, это совершенно очевидно, если вы читаете ошибку. Если вы не понимаете здесь термина, вы, вероятно, не полностью поняли OO. Так что читайте об этом еще раз – AxelH

+0

Почему у этого так много оборотов? Ответчик явно забыл реализовать свой интерфейс. Возможно, у друзей есть друзья? Или, может быть, я просто суеверен/параноик. – byxor

ответ

2

StartRoom implements ActionListener означает, что StartRoom должен заключить договор ActionListener. Метод actionPerformed(ActionEvent) должен быть реализован самостоятельно.

public class StartRoom extends Room implements ActionListener { 
    ... 

    @Override 
    public void actionPerformed(java.awt.event.ActionEvent ae) { 
     // your code here.... 
    } 
} 

Если вы хотите передать другой класс, MyActionListener, к примеру, вы должны изменить использование в buttonTwo.addActionListener(this);, заменив this экземпляром MyActionListener.

MyActionListener toto = new MyActionListener(); 
buttonTwo.addActionListener(toto); 

В последнем случае вы mshould удалить implements ActionListener из StartRoom объявления класса.

0

Когда вы реализуете что-то, вы используете этот класс в качестве интерфейса, а это означает, что вы должны использовать и переопределять каждый метод в классе, который вы реализуете. Однако, если вы хотите использовать метод (ы) этого класса как-то, вы можете расширить его и сделать этот класс суперклассом вашего класса. Имейте в виду, что вы можете расширить только один класс, но вы можете реализовать большое количество классов в качестве интерфейсов.