【问题标题】:Can outer classes call methods of its inner class?外部类可以调用其内部类的方法吗?
【发布时间】:2013-05-31 13:03:49
【问题描述】:

我有代码在用户单击特定按钮时建立服务器连接。我创建了一个内部类来监听动作。在内部类中的单个方法中,我还建立了前面提到的服务器连接。

我的问题是,只能在“内部”类中使用 Socket 连接吗?或者,外部类可以继续与所述服务器通信吗?


然而,我明白内部类可以不受限制地访问外部类(好像它外部类。我的问题是相反的。

【问题讨论】:

  • 是的,外部类的实例可以调用内部类实例的方法。
  • 是的,我在发布答案时误解了这个问题。你当然可以这样做。你甚至可以access private fields of the inner class from the outer class
  • 旁注:Joshua Bloch 在“有效的 java”中有一个关于嵌套类的精彩章节。
  • 内部类方法是私有类型的,所以我很担心。我现在明白了。如果两种方式本质上都可以不受限制地访问,那么内部类的目的是什么?

标签: java class scope


【解决方案1】:

像这样创建一个实例并访问你想要的:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

【讨论】:

    【解决方案2】:

    在内部类上声明的所有方法都是可访问的 ...无论它们是声明为public还是...private

    如果内部方法是static,那么它们总是可以被外部类中的代码调用。您只需要使用内部类名称限定方法名称。

    否则,外部类代码需要内部类实例的引用才能调用其上的方法。 (但这是正常的。)


    (如果你问的是内部类是否可以调用外部类的方法,那就有点复杂了。上面的大部分内容都适用,但如果内部类不是static,它也可以 通过this 在其外部类上调用实例方法。)

    【讨论】:

    • Outer classes can access private methods of inner class. - 这是设计使然,还是有特定原因?
    • 这是设计使然。 (强)封装边界是最外层的类。
    【解决方案3】:

    是的,你可以在下面的示例代码中实现这一点

        currentDateMinutes=getDateAndTime();
        System.out.println("DATE & TIME:"+new JobSchedulerUtil().new TaskScheduler(currentDateMinutes).timeNow()); 
    

    上面的代码 JobSchedulerUtil 类是一个具有 getDateAndTime() 方法的外部类和一​​个具有 timeNow() 方法的内部类 TaskScheduler。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 2023-03-23
      • 1970-01-01
      • 2011-08-11
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      相关资源
      最近更新 更多