我寫了一個匿名內部類,
ActionListener ac = new ActionListener(){
      @Override
      public void actionPeformed(ActionEvent e){
      ...
      }      public void myMethod(){
      ...
      }
};
ac.actionPerformed() 可以調用而ac.myMethod()就不可以調用
為什麽 ?  怎么做才能調用myMethod ??注:這些代碼都是在同一個public class 里面除了寫一自己的類繼承ActionListener,還有其它辦法嗎?

解决方案 »

  1.   

    楼主好好看一下,ActionListener这个肯定是一个接口或者抽象类,actionPerformed这个方法是接口或者抽象类的方法,所以ac.actionPerformed() 可以调用,myMethod方法是你自己写的,接口里面没有这个方法 所以不能调用
      

  2.   

    作为监听器,只会调用接口里面声明的方法,自定的方法不会被调用。想要被调用最简单的方法是在actionPerformed 中调用myMethod
      

  3.   

    一定不可以,楼主这么写试下
    ActionListener ac = new ActionListener(){
      @Override
      public void actionPeformed(ActionEvent e){
      ...
      }  public ActionListener myMethod(){
      ...
       return this;
      }
    }.myMethod();
      

  4.   

    楼主写的ActionListener ac = new ActionListener(),java肯定不知道楼主自己定义的方法,它认识的只有ActionListerner中的方法
      

  5.   

    原因非常简单,定义匿名内部类的时候,JVM会自动给你生成一个类,说是匿名,其实对于JVM来说,当然不是匿名,JVM知道这个类,而用户不知道,用户无法访问这个类,这个类是你new的类或接口的子类或实现类,它的引用是父类或接口,大家都知道,父类或接口的引用指向子类或实现类,是无法访问子类或实现类的方法的,不过楼主可以试试反射,没准有用,我还没试过
      

  6.   

    import java.awt.event.*;
    import java.lang.reflect.*;public class Test {
    public static void main(String[] args) throws Exception {
    ActionListener ac = new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
    System.out.println("actionPeformed");
    } public void myMethod(){
    System.out.println("myMethod");
    }
    };
    ac.actionPerformed(null);
    Method myMethod = ac.getClass().getMethod("myMethod", new Class[0]);
    myMethod.invoke(ac);
    }
    }经检验,反射可以完成这个调用,回答完毕