Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Must implement the inherited abstract method

My class implements ActionListener. I have implemented the following nested classes below:

JMenuItem mntmNew = new JMenuItem("New...");
    mntmNew.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            doNew(e); //calls to outer class for cleaner code
        }
    });
    mnFile.add(mntmNew);

    JMenuItem mntmLoad = new JMenuItem("Load...");
    mntmLoad.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e){
            doLoad(e); //calls to outer class for cleaner code
        }
    });
    mnFile.add(mntmLoad);

//etc. for the rest of the menu system

However, Eclipse is still telling me that my class must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent e). Can you not implement override methods in a nested class in this way?

like image 676
Daniel Avatar asked Jun 15 '13 21:06

Daniel


People also ask

Is it compulsory to implement abstract methods?

An abstract class is not required to have an abstract method in it. But any class that has an abstract method in it or that does not provide an implementation for any abstract methods declared in its superclasses must be declared as an abstract class.

Is it necessary to inherit abstract class?

Abstract class: is a restricted class that cannot be used to create objects (to access it, it must be inherited from another class).

Which keyword is used to inherit abstract?

Using abstract keyword, the abstract classes and methods can be created. The abstract classes are made abstract for data abstraction, so the only medium of extracting data from it is inheritance.


1 Answers

Your question:

Can you not implement override methods in a nested class in this way?

The answer is no. Eclipse (actually Java) is complaining that while you're declaring your class as implementing ActionListener you're not giving your class the necessary actionPerformed(...) method in the class's own scope -- and this last part is very important. The class that implements the interface must implement all the interface's required methods in its own scope and not in nested classes. Note that this doesn't prevent you from nesting classes that also implement ActionListener or other interfaces, but regardless, the rule remains that a non-abstract class that implements an interface must override all of the interface's methods.

But since you're not using objects of your class as an ActionListener, the simple solution is to not declare your class as implementing the ActionListener interface. Problem solved. And actually you're far better off not having your GUI class implement your listener interfaces since combining them in one class is asking a class to do too much. In technical terms, it unnecessarily reduces a class's cohesion and risks increasing it's coupling reducing its readability and maintainability.

like image 116
Hovercraft Full Of Eels Avatar answered Oct 21 '22 08:10

Hovercraft Full Of Eels