什么错误?就是完全不符合语法规定的错误。
mb.UsePCICard(new PCI()) //到这里,UsePCICard方法已经完了,
//只需要一个分号。
{ //你又在这里另外开一行,编译器不知
//道你想做什么。
public void start() //你定义的这些方法是属于谁的?编译器不知道。
{
System.out.println("test start");
}
public void stop()
{
System.out.println("test stop");
}
};
mb.UsePCICard(new PCI()) //到这里,UsePCICard方法已经完了,
//只需要一个分号。
{ //你又在这里另外开一行,编译器不知
//道你想做什么。
public void start() //你定义的这些方法是属于谁的?编译器不知道。
{
System.out.println("test start");
}
public void stop()
{
System.out.println("test stop");
}
};
楼上几位说得对:
正确的做法相当于下面这样(匿名内部类)
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());
}
}
{ //这个用的应该是内部类,常用的如:
frame.addWindowListener( new WindowAdapter() //最常用的内部类
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} )
正常情况下。class aa implements PCI { //类aa的实现
//……
}
mb.UsePCICard(new aa); 这里aa是你想要试验的临时类,此时,mb.UsePCICard的参数是aa类,也就是说:mb.UsePCICard的参数已知,UsePCICard通过类名aa找到aa的实现部分,类aa不是匿名。mb.UsePCICard(new PCI()
{
//……
});//类的实现包含在参数调用中,不需要指定类名即可找到参数的实现部分,即所指的匿名类。其实此种方式只是上面的简化。