If a class is a local inner class, does this mean that it is inside a method of another class or does it mean that it is just defined in another method somewhere.
For example, in the code below, is the MenuListener considered an inner local class?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MenuDemo extends JFrame{
private Container c;
private ImageIcon[] images = new ImageIcon[5];
private JLabel picture;
private JPanel mainPanel;
private JMenuBar menuBar;
private JMenu menu;
private JMenuItem bird,cat,dog,rabbit,pig;
public MenuDemo() {
super("Menu Demo");
c = getContentPane();
c.setLayout(new BorderLayout());
mainPanel = new JPanel();
// Store the animal pictures in an array.
for (int i=0; i<5; i++){
images[i] = new ImageIcon("image" + i + ".gif");
}
//Set up the picture label.
picture = new JLabel(images[0]);
picture.setPreferredSize(new Dimension(177,122));
mainPanel.add(picture, BorderLayout.CENTER);
c.add(mainPanel);
buildMenuBar();
this.setJMenuBar(menuBar);
pack();
setVisible(true);
}
private void buildMenuBar(){
MenuListener listener = new MenuListener();
menuBar = new JMenuBar();
menu = new JMenu("Animals");
menu.setMnemonic(KeyEvent.VK_A);
menuBar.add(menu);
bird = new JMenuItem("Bird", KeyEvent.VK_B);
bird.addActionListener(listener);
menu.add(bird);
cat = new JMenuItem("Cat", KeyEvent.VK_C);
cat.addActionListener(listener);
menu.add(cat);
dog = new JMenuItem("Dog", KeyEvent.VK_D);
dog.addActionListener(listener);
menu.add(dog);
rabbit = new JMenuItem("Rabbit", KeyEvent.VK_R);
rabbit.addActionListener(listener);
menu.add(rabbit);
pig = new JMenuItem("Pig", KeyEvent.VK_P);
pig.addActionListener(listener);
menu.add(pig);
}
private class MenuListener implements ActionListener {
public void actionPerformed(ActionEvent e){
if (e.getSource() == bird)
picture.setIcon(images[0]);
else if (e.getSource() == cat)
picture.setIcon(images[1]);
else if (e.getSource() == dog)
picture.setIcon(images[2]);
else if (e.getSource() == rabbit)
picture.setIcon(images[3]);
if (e.getSource() == pig)
picture.setIcon(images[4]);
}
}
public static void main(String[] args){
MenuDemo m = new MenuDemo();
m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
According to some official Oracle Java tutorial, a local inner class is a class that is defined in a code block rather than a part of another class' definition. This means a class defined inside a method or in an initializer block.
Following that definition, MenuListener
is not a local inner class -- it is just an inner class.
So:
public class Outer {
public class Inner1 {
}
public static class Inner2 {
}
public void method(){
class LocalInner{
}
LocalInner yesThisActuallyCompiles = new LocalInner();
}
}
If a class is a local inner class, does this mean that it is inside a method
Yes.
of another class
No. Of a class, but any method has to be in a class.
or does it mean that it is just defined in another method somewhere.
Yes.
There not much difference between these, except for the difference between 'in another class' and 'somewhere'. It's not really clear what you're actually asking.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With