java 匿名内部类
匿名内部类:
- 本质上是一个没有名字的局部内部类,定义在方法中、代码块中等
- 作用:方便创建子类对象,最终目的为了简化代码编写。
**格式:**new 类|抽象类名|接口名(){
重写方法;
}
Employee e = new Employee(){
public void work(){
}
}
使用实例:
public class Test {
public static void main(String[] args) {
//利用匿名内部类创建对象
Animal a = new Animal() {
@Override
public void run() {
System.out.println("tigger跑的快!");
}
};
a.run();
}
}
abstract class Animal{
public abstract void run();
}
特点总结
- 匿名内部类是一个没有名字的内部类
- 匿名内部类写出来就会产生一个匿名内部类的对象
- 匿名内部类的对象类型相当于是当前new的那个类型的子类类型。
总结
-
匿名内部类的作用?
- 方便创建子类对象、最终目的为了简化代码编写。
-
匿名内部类的格式
-
Employee e = new Employee(){ @override public void work(){ } }
-
-
匿名内部类的特点?
- 匿名内部类是一个没有名字的内部类。
- 匿名内部类写出来就会产生一个匿名内部类的对象
- 匿名内部类的对象类型相当于是当前new的那个的类型的子类类型。
匿名内部类的常见使用形式
ppublic class Test1 {
public static void main(String[] args) {
go(new swim() {
@Override
public void swimming() {
System.out.println("学生在欢快的自由泳!");
}
});
System.out.println("-----------------------------");
go(new swim() {
@Override
public void swimming() {
System.out.println("老师游的贼快!");
}
});
}
public static void go(swim s){
System.out.println("比赛开始!");
s.swimming();
System.out.println("比赛结束!");
};
}
interface swim{
public void swimming();
}
总结:匿名内部类可以作为方法的实际参数进行传输。
匿名内部类真实使用场景演示
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test2 {
public static void main(String[] args) {
//创建窗口对象
JFrame win = new JFrame("登录界面");
//创建桌布
JPanel panel = new JPanel();
win.add(panel);
//创建点击按钮
JButton button = new JButton("登录");
//将按钮添加到桌布上
panel.add(button);
//设置窗口大小
win.setSize(400,300);
//设置窗口位置
win.setLocationRelativeTo(null);
//展示窗口
win.setVisible(true);
//为按钮添加事件监听器
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showConfirmDialog(win,"成功点击登录!");
}
});
}
}
使用总结:
开发中不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用。匿名内部类的代码可以实现代码进一步简化。