【问题标题】:Difference between Inner Class methods VS Instance Methods in JavaJava中内部类方法与实例方法之间的区别
【发布时间】:2014-09-07 12:03:01
【问题描述】:

Java 中内部类的确切目的是什么以及在其中创建方法。如果我在类中创建方法而不是在内部类中创建这些方法,我可以获得相同的行为吗?

我们既可以访问内部类方法,也可以访问外部类之外的实例方法。那么Java中内部类的确切目的是什么?是否存在没有内部类我们无法生存的情况/可能性?

【问题讨论】:

  • 没有内部类你也可以生存,但是它们让事情变得更容易——特别是如果你想有两个类使用相同的变量,但如果它只被另一个类使用,或者如果你想拥有一个 ActionListener 而不为它定义一个 ne 类(在这种情况下使用匿名内部类)
  • 这是组织代码的另一种方式,将密切相关的类放在一起。如果调用者不需要知道类,内部类会更有用。例如集合对嵌套类的使用。

标签: java class oop methods inner-classes


【解决方案1】:

使用它们很大程度上取决于您需要做什么。有时您需要一个仅在一个特定类内部使用的类,有时您需要快速创建一个 Comparator 实例并将其传递给sort() 方法(匿名内部类)。一些内部类可以在类之外访问,有些则不能。 java中有四种不同的嵌套类,更多我推荐阅读:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

【讨论】:

  • 嵌套类有四种变体。
  • 不是在另一个类中创建该类,为什么我们不能使用本地/静态方法进行管理。要访问实例方法,我们需要该类的对象,同时访问内部类方法我们需要外部类对象。那么在这里创建内部类有什么意义呢。
【解决方案2】:

内部类不会在外部类实例化时实例化,除非你在构造函数中明确地这样做。因此,除非它们是 static 或者您创建了它的实例并使用它们,否则它的方法对类的其余部分没有用。

如果您将方法放在内部类中,它们可以访问内部方法、实例变量!您不能在外部类中访问这些变量。

【讨论】:

    【解决方案3】:

    可以参考this

    基本上内部类保持面向对象的编程更加完整。 有时,当您必须实现一个只有一个未实现方法内部类的接口时,它会派上用场。特别是匿名内部类。 我们也可以使用这个内部类进行回调,而不是编写复杂的 if-else 结构或 switch case

    【讨论】:

    • 我不会再建议只使用一种方法的接口的 Anonymos 内部类。改用 Java8 的 Lambdas
    猜你喜欢
    • 1970-01-01
    • 2017-02-15
    • 2012-08-06
    • 2015-12-11
    • 2013-06-12
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多