import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwiFrame {
public static void main(String[] args) {
final JFrame jframe1 = new JFrame("我的框架");//内部类要调用的对象需final修饰
jframe1.setSize(300, 200);
JButton jbt1 = new JButton("改变框架标题");
jframe1.getContentPane().add(jbt1);
jbt1.addActionListener(new ActionListener(){//使用了匿名内部类实现接口??=监听器对象??接口名是对象名吗?匿名内部类要求是 new 对象名(){};
@Override
public void actionPerformed(ActionEvent e) {
jframe1.setTitle("框架新标题");
}
});
jframe1.setVisible(true);
}
}
你的意思是不是说程序匿名内部类中ActionListener默认为子类对象,不需要附加语句实现说明对吧?但ActionListener是一个接口,好像没有继承这么一说???
追答 由于ActionListener 是接口,所以new ActionListenr{ 重写接口中未实现的方法} 中 的继承其实是实现。类对象为啥final修饰主要是使得类不能再继承。主要是为了“效率” 和 “安全性” 的缘故。
匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
接口不能直接new对象,只能实现借口。
那个内部类的基本语法我是在教学视频上看的,上面说匿名内部类的基本语法为:
return new A(){//A为对象名
//内部类体
};
就是啊
return new A(){//A为对象名或者 接口名
//内部类体
};
其实写成这样就对了.....
明显的嘛,内部类不一定非得要使用final修饰。使用final修饰的Class无法被继承,意味着该类不需要拓展或者修改。
接口可以New,但不是New接口本身。而是New接口的实现类。for example:
List<Integer> list=new ArrayList<Integer>();