JAVA中内部匿名类以及接口的使用和作用?
发布网友
发布时间:2022-05-01 22:40
我来回答
共3个回答
热心网友
时间:2022-06-24 11:46
Java中内部匿名类的使用
Java中内部匿名类用的最多的地方也许就是在Frame中加入Listner了吧。
如下:
import java.awt.*;
import java.awt.event.*;
public class QFrame extends Frame {
public QFrame() {
this.setTitle("my application");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.setBounds(10,10,200,200);
}
}
内部匿名类,就是建立一个内部的类,但没有给你命名,也就是没有引用实例的变量。
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
new 是建立一个 WindowAdapter对象 ,后面一个 {} 表示这个括号中的操作作用于这个默认的对名象,
而上面的Java程序中后面是一个函数体。这种用法是 Delphi 和 VB 所没有的。
这个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。
打开 WindowAdapter 的代码可以发现。它是一个抽象类。它是对 WindowListener 接口的一个实现。
Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个匿名类。
---------------------------------------------------------------
以上观点,纯属个人看法。
如有不同意见,留下名来。
多谢。
----------------------------------------------------------------
补记, java 中的内部匿名类与 Delphi 中的 with 是不是一样的。with 只是指定一个默认的操作对象,是从编辑上来说,减少输入录(执行上也许也会快点)。而 java 中的内部匿名类,着重在于派生一个新类,但不给这个新类指定一个类名。
代码例子如下:
01
02
03 class AClass {
04 String name = new String("");
05
06 AClass() {
07 }
08
09 AClass(String name) {
10 this();
11 this.name = name;
12 }
13
14 public void print() {
15 System.out.println("The name = " + name);
16 }
17 }
18
19 public class QTest {
20 public static void main(String[] args) {
21 (new AClass("RedSoft"){
22 public void print() {
23 System.out.println("the anonymose class print");
24 super.print();
25 }
26 }).print();
27 }
28 }
运行结果:
the anonymose class print
The name = RedSoft
接口因为java不像c++那样能够多继承 所以有了接口,原理和c++里的多继承是一样的,还有就是规范设计
热心网友
时间:2022-06-24 11:46
1)接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的同意格式进行定义。JAVA里是不支持多继承的,但可以实现多个接口。
2)如果再深入局部内部类,可以设想一下,只创建这个类的一个对象,就不用再给它明明了,这个类就是匿名内部类。由于构造器的名字必须与类名相同,而匿名类又没有类名,所以匿名类不能有构造器,而将构造器参数传递给超类的构造器。尤其是在内部类实现接口的时候,不能有任何构造参数。
热心网友
时间:2022-06-24 11:47
接口就是一组没有实现的抽象方法,接口可以扩展(继承),一般做法是用一个抽象类实现接口中的部分公用方法,其他的类就可以继承该抽象类去实现其他未实现的方法
匿名内部类一般就用在swing或awt中的事件监听上面
比如给按钮bt加上事件监听,表示当按下该按钮是要执行的操作
JButton bt = new JButton("bt");
bt.addActionListener(new ActionListener(){
void actionPerformed(ActionEvent e) {
//要执行的操作
}
});