什么错误?就是完全不符合语法规定的错误。
mb.UsePCICard(new PCI())   //到这里,UsePCICard方法已经完了,
                                             //只需要一个分号。
{                          //你又在这里另外开一行,编译器不知
                                             //道你想做什么。
public void start() //你定义的这些方法是属于谁的?编译器不知道。
{
System.out.println("test start");
}
public void stop()
{
System.out.println("test stop");
}
};

解决方案 »

  1.   


    楼上几位说得对:
    正确的做法相当于下面这样(匿名内部类)
    class Assembler
    {
    public static void main(String[] args)
    {
    MainBoard mb = new MainBoard();
    NetworkCard nc = new NetworkCard();
    SoundCard sc = new SoundCard();
    //mb.UsePCICard(nc);
    //mb.UsePCICard(sc);
    class aa implements PCI {

    public void start()
    {
    System.out.println("test start");
    }
    public void stop()
    {
    System.out.println("test stop");
    }
    }
    mb.UsePCICard(new aa());
    }
    }
      

  2.   

    mb.UsePCICard(new PCI())  //这个地方多个 ) 符号吧??
        {                     //这个用的应该是内部类,常用的如:
    frame.addWindowListener( new WindowAdapter()   //最常用的内部类
        {
             public void windowClosing(WindowEvent e)
             {
                  System.exit(0);
             }
        } ) 
      

  3.   

    楼上的各位已经说得很清楚了,我在这里重复一下。
    正常情况下。class aa implements PCI {  //类aa的实现
    //……
    }
    mb.UsePCICard(new aa); 这里aa是你想要试验的临时类,此时,mb.UsePCICard的参数是aa类,也就是说:mb.UsePCICard的参数已知,UsePCICard通过类名aa找到aa的实现部分,类aa不是匿名。mb.UsePCICard(new PCI()
    {
    //……
    });//类的实现包含在参数调用中,不需要指定类名即可找到参数的实现部分,即所指的匿名类。其实此种方式只是上面的简化。