Java教程--Java匿名类

匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法
 

java 代码
view plaincopy to clipboardprint?
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();      
}      
}     
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也可以是一个类 但是你外部调用的方法必须在你的这个类或接口中声明 外部不能调用匿名类内部的方法
Java中内部匿名类用的最多的地方也许就是在Frame中加入Listner了吧。
如下:
java 代码
view plaincopy to clipboardprint?
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);      
     }      
}     
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程序中后面是一个函数体。
这个用法的作用是:创建一个对象的实例,并且 override 它的一个函数。
打开 WindowAdapter 的代码可以发现。它是一个抽象类。它是对 WindowListener 接口的一个实现。
Frame.addWindowListner(); 的参数是一个 WindowListner ,而实现上是传一个从WindowAdapter 派生出的一个匿名类。
 
关于匿名类的详细讲解,详见Java教程 《跟我学Java26日通》Java培训视频

你可能感兴趣的:(java,职场,java教程,java培训,休闲)