天天看点

java中匿名内部类实现接口_java中的匿名内部类是成员内部类吗?我就很不明白为什么造一个接口的时候匿名内部类是怎么去实现接口的...

展开全部

内部类分为四种:

静态e68a8462616964757a686964616f31333337623463内部类(static inner classes)

成员内部类(member inner classes)

局部内部类(local inner classes)

匿名内部类(anonymous inner classes)

所以匿名内部类不是成员内部类.

匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。

匿名内部类会隐式地继承一个父类或实现一个接口。

有些接口实现类,往往就需要用一次, 所以不需要名字,代码显得简洁import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class ChangFrameDemo extends JFrame {

JPanel jp1, jp2;//2个JPanel对象

JButton jb1;

boolean flag;//用于判断是打开第1还是第2个JPanel

public ChangFrameDemo() {

jp1 = new JPanel();

jp1.add(new JLabel("信息录入"));

jp1.setBackground(Color.YELLOW);

jp2 = new JPanel();

jp2.add(new JLabel("信息查询"));

jp2.setBackground(Color.LIGHT_GRAY);

jb1 = new JButton("切换内容");

JPanel jp3 = new JPanel();

jp3.add(jb1);

add(jp1);

add(jp3, BorderLayout.SOUTH);

setTitle("切换内容窗口");

setSize(380, 300);

setLocationRelativeTo(null);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

//第一种写法,写一个类继承于ActionListener 然后实现它的方法

//MyActionListener ma = new MyActionListener();

//jb1.addActionListener(ma);

//下面是第二种方法

jb1.addActionListener(new ActionListener() {//事件响应

@Override

public void actionPerformed(ActionEvent e) {

Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane

flag = !flag;

if (flag) {

pane.remove(jp1);//删除jp1

pane.add(jp2);//添加jp2

} else {

pane.remove(jp2);

pane.add(jp1);

}

pane.validate();//重构界面

pane.repaint();//重新绘制

}

});

}

public static void main(String[] args) {

new ChangFrameDemo();

}

//第一种写法需要的类

class MyActionListener implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane

flag = !flag;

if (flag) {

pane.remove(jp1);//删除jp1

pane.add(jp2);//添加jp2

} else {

pane.remove(jp2);

pane.add(jp1);

}

pane.validate();//重构界面

pane.repaint();//重新绘制

}

}

}

如果JDK升级到8.0 还支持更简洁的Lambda表达式