ActionListener action = new A();class A implements actionListener
{
   actionPerformed(actionEvent e)
   {
        //...
   }
}请问A是类,而actionListener是接口,为何能像超类 = new 子类()一样用呢,还有不是接口不能实例话么?

解决方案 »

  1.   

    ActionListener action = new A();
    这样定义得好处是对使用action得开发者而言,只知道接口(方法名,参数),而不知道里面得实现。
    这就是传说中java"多态"的一种表现形式不要问,“为什么能够”这样。这是java虚拟机决定的,是发明java的大神们决定的。我们只要知道能这么用就可以了。
      

  2.   

    没有错,接口是不可以实例化一个对象,但是没有说接口不能定义一个自己的变量啊,你刚刚的ActionListener action就是定义了一个ActionListener的变量,至于为什么可以new A()
    这里的A一定要注意了,它可不能是其他的类,它只能是实现了这个接口的类~
    举个例子和你说
    interface Point{
         void output();
    }
    class cbbs implements Point{}
    class Imclass{
         void imace(Point p)//注意这里,虽然这里是Point p但是传递进来的一定是实现上面接口的方法}
    不知道上述解释对你是否有帮助,有的话不要忘了给分啊