【问题标题】:Anonymous inner class must extend some superclass?匿名内部类必须扩展一些超类?
【发布时间】:2012-09-08 16:16:08
【问题描述】:

我正在学习java swing,遇到了匿名内部类的概念。在对这个link 进行了一些研究之后,我觉得匿名内部类必须始终扩展其他一些类,因为它作为参数传递的方法是预定义的。最多,如果一个方法接受 Object 实例作为参数,只有这样我们才能创建一个匿名的独立内部类。我只是征求你的意见,我是否正确。如果您能提供一些示例,将会很有帮助。 提前致谢。

【问题讨论】:

  • 所以我得到的是匿名内部类只能用于覆盖其超类的方法。

标签: java inner-classes anonymous-inner-class


【解决方案1】:

每个 类都必须扩展一些超类。 only 例外是java.lang.Object,它是顶级类,因此不能 有超类。匿名内部类在这方面没有什么不同。

【讨论】:

    【解决方案2】:

    内部类的目的是以一种您可以从其他地方使用的方式“打包”一个操作的实现。当您将一段代码传递给可以将控制权传回给您的方法时,这可以让您实现 回调 的概念。

    基类/接口用于提供对该段代码的访问点。您和您调用的方法就回调方法的名称和签名达成一致,方法是就您的内部类(实际上是任何类)必须实现的接口达成一致,目标方法才能回调您。

    更具体地说,为了让窗口回调您的窗口侦听器,您必须同意 windowClosing 方法的名称和签名。你可以通过实现一个接口来做到这一点。

    在极少数情况下,当目标方法是由java.lang.Object(例如toString)实现的方法时,您可以从顶级Object 派生您的命名或匿名内部类。

    【讨论】:

      【解决方案3】:

      在不扩展任何东西的情况下创建匿名内部类基本上意味着您无法与之交谈。

      例如,您需要扩展一个类或实现一个接口,以便为您的对象提供可以与之交谈的已知方法;

      myButton.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e)
          {
              // do something here.
          }
      });
      

      与该对象的实例对话的唯一方法是通过已知的 ActionListener 方法(恰好是 addActionListener 需要的方法),您添加的任何其他方法都只能在内部访问 对象本身。如果您不必扩展/实现任何东西,那么根本就没有任何方法可以从外部访问。

      【讨论】:

        【解决方案4】:

        您的陈述是正确的,即您通过它创建匿名内部类的类 自动继承该类,在这种情况下匿名类继承类 C

         class C
        {
        void one()
        {
        System.out.println("***************************\n********");
        
        }
        }
        class three
        {
        public static void main(String args[])
        
        {
        C obj=new C(){
                     void one()
                     {
                     System.out.println("//////////////");
                      }
                   };
         obj.one();
        
        }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-15
          • 2011-07-06
          • 1970-01-01
          • 1970-01-01
          • 2017-08-15
          相关资源
          最近更新 更多