匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創(chuàng)建時(shí),作為new語句的一部分來聲明它們。 這就要采用另一種形式的new語句,如下所示: new <類或接口> <類的主體> 這種形式的new語句聲明一個(gè)新的匿名類,它對(duì)一個(gè)給定的類進(jìn)行擴(kuò)展,或者實(shí)現(xiàn)一個(gè)給定的接口。它還創(chuàng)建那個(gè)類的一個(gè)新實(shí)例,并把它作為語句的結(jié)果而返回。要擴(kuò)展的類和要實(shí)現(xiàn)的接口是new語句的操作數(shù),后跟匿名類的主體。 如果匿名類對(duì)另一個(gè)類進(jìn)行擴(kuò)展,它的主體可以訪問類的成員、覆蓋它的方法等等,這和其他任何標(biāo)準(zhǔn)的類都是一樣的。如果匿名類實(shí)現(xiàn)了一個(gè)接口,它的主體必須實(shí)現(xiàn)接口的方法
java 代碼
- interface pr
- {
- void print1();
- }
-
- public class noNameClass
- {
- public pr dest()
- {
- return new pr(){
- public void print1()
- {
- System.out.println("Hello world!!");
- }
- };
- }
-
- public static void main(String args[])
- {
- noNameClass c=new noNameClass();
- pr hw=c.dest();
- hw.print1();
- }
- }
-
pr也可以是一個(gè)類 但是你外部調(diào)用的方法必須在你的這個(gè)類或接口中聲明 外部不能調(diào)用匿名類內(nèi)部的方法
Java中內(nèi)部匿名類用的最多的地方也許就是在Frame中加入Listner了吧。
如下:
java 代碼
- 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);
- }
- }
內(nèi)部匿名類,就是建立一個(gè)內(nèi)部的類,但沒有給你命名,也就是沒有引用實(shí)例的變量。
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
new 是建立一個(gè) WindowAdapter對(duì)象 ,后面一個(gè) {} 表示這個(gè)括號(hào)中的操作作用于這個(gè)默認(rèn)的對(duì)名象,
而上面的Java程序中后面是一個(gè)函數(shù)體。
這個(gè)用法的作用是:創(chuàng)建一個(gè)對(duì)象的實(shí)例,并且 override 它的一個(gè)函數(shù)。
打開 WindowAdapter 的代碼可以發(fā)現(xiàn)。它是一個(gè)抽象類。它是對(duì) WindowListener 接口的一個(gè)實(shí)現(xiàn)。
Frame.addWindowListner(); 的參數(shù)是一個(gè) WindowListner ,而實(shí)現(xiàn)上是傳一個(gè)從WindowAdapter 派生出的一個(gè)匿名類。