java - 内部类和。 Java 中的子类

标签 java inheritance inner-classes

在 Java 中是否存在使用内部类比使用子类更有利的情况(反之亦然)?根据我目前的理解,内部类可以访问外部类的字段和方法。这与使用继承有何不同?

子类通常可以访问所有标记为 public 和 protected 的字段/方法。可以使用 getter 方法在子类中访问父类中标记为私有(private)的字段。根据我目前所见,当方法被标记为私有(private)时,它们通常会在该类的其他标记为公共(public)或 protected 方法中调用。诚然,我不是经验丰富的 Java 程序员,但这似乎是大势所趋。

根据我目前的理解,选择一个而不是另一个似乎没有任何好处。有人可以深入了解为什么以及何时我应该使用内部类而不是继承(反之亦然)吗?

最佳答案

内部类和子类有很大的区别:

  • 内部类在同一个文件中,而子类可以在另一个文件中,也许在另一个包中。
  • 如果没有包含它的类的实例,您就无法获得内部类的实例。
  • 内部类有它们想要的方法,而子类有它们父类的方法。子类当然可以定义额外的方法,但它们始终拥有父类的方法。

关于情况:

  • 当你的大类需要一个(通常是短的)类,与其内部操作相关,并且没有其他人需要它时,使用内部类。 Nik G 引用的一个很好的例子是 LinkedList:它需要一个 Node 类才能工作,这很短,而且没有其他类需要。因此Node是LinkedList的内部类。
  • 当你定义一个“is-a”关系时使用子类。想象一下:您想制造不同类型的汽车。它们具有共同的属性和特征:它们可以移动,它们有乘客,等等。所以你用这些共同的东西创建了一个抽象类“Car”。然后为每种不同类型的汽车创建一个子类。

关于java - 内部类和。 Java 中的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33421432/

相关文章:

java - 公共(public)静态类的 YAJSW 错误

C++ 析构函数行为

java - 从外部类继承内部类与其他内部类

java - 无法访问匿名嵌套子类的成员(实现接口(interface))

java - getSingleResult 返回 hibernate 中 native 标量查询的代理

java - 用颜色填充圆圈

java - 我们可以用 ArrayDeque 替换 ArrayList 以获得更好的性能吗?

java - Hibernate无法保存继承的对象

java - 如何从父类(super class)类型的ArrayList中获取某个子类型的对象?

java - 多态类/多态性/内部类-获取错误信息