如果一个类是一个本地内部类,这是否意味着它在另一个类的方法中,或者它是否意味着它只是在某个地方的另一个方法中定义。
例如,在下面的代码中,MenuListener是否被视为内部本地类?
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);
}
}
答案 0 :(得分:11)
According to some official Oracle Java tutorial,本地内部类是在代码块中定义的类,而不是另一个类定义的一部分。这意味着在方法或初始化程序块中定义的类。
遵循该定义,MenuListener
不是本地内部类 - 它只是一个内部类。
所以:
public class Outer {
public class Inner1 {
}
public static class Inner2 {
}
public void method(){
class LocalInner{
}
LocalInner yesThisActuallyCompiles = new LocalInner();
}
}
答案 1 :(得分:1)
如果一个类是本地内部类,这是否意味着它在一个内部 方法
是
另一个班级
没有。 a 类,但任何方法都必须在类中。
或者它是否意味着它只是在中定义 另一种方法。
是
这些之间没有太大区别,除了“在另一个班级”和“某个地方”之间的区别。你真正要问的是什么并不是很清楚。
答案 2 :(得分:0)
内部班级/会员班级
在类中但在方法外部创建的非静态类称为成员内部类。
class TestMemberOuter1{
private int data=30;
class Inner{
void msg(){System.out.println("data is "+data);}
}
public static void main(String args[]){
TestMemberOuter1 obj=new TestMemberOuter1();
TestMemberOuter1.Inner in=obj.new Inner();
in.msg();
}
}
本地内部课程
在方法内创建的类在java中称为本地内部类。如果要调用本地内部类的方法,则必须在方法
中实例化此类 public class localInner1{
private int data=30;
void display(){
class Local{
void msg(){System.out.println(data);}
}
Local l=new Local();
l.msg();
}
public static void main(String args[]){
localInner1 obj=new localInner1();
obj.display();
}
}