在 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/