Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的内部类与子类_Java_Inheritance_Inner Classes - Fatal编程技术网

Java中的内部类与子类

Java中的内部类与子类,java,inheritance,inner-classes,Java,Inheritance,Inner Classes,在Java中使用内部类是否比使用子类更有利(反之亦然)?根据我目前的理解,内部类可以访问外部类的字段和方法。这与使用继承有何不同 子类通常可以访问所有标记为public和protected的字段/方法。可以使用getter方法在子类中访问父类中标记为private的字段。根据我到目前为止所看到的,当方法被标记为private时,它们通常在类中其他被标记为public或protected的方法中调用。诚然,我不是一个有经验的Java程序员,但这似乎是大势所趋 根据我目前的理解,选择其中一个似乎真的

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

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


根据我目前的理解,选择其中一个似乎真的没有什么好处。有人能告诉我为什么和什么时候应该使用内部类而不是继承(反之亦然)吗

这很简单。。但是内部类和子类是不一样的

子类在具有继承逻辑时使用。例如,矩形是形状,所以:矩形可以从形状继承

当您有一个只需要在特定类中使用的类时,将使用内部类。这样,没有人会使用类,除非他在需要使用内部类的类中。 例如: 你有甲级 a类有地图。Key类是您为定义复合Key类而创建的类,它仅在内部使用。因此Key可以是内部类。。通过这种方式,您可以减少文件(类),以便其他开发人员不需要处理和理解,除非他使用


希望有意义

子类本质上与其父类共享“is-A”关系,而内部类共享“has-A”关系。例如 我们有蛋黄这一类,它是鸡蛋的内层 类,那么我们说鸡蛋类有一个蛋黄类。目的 蛋黄类可以作为蛋类的一个成员,但也有 他们的功能没有链接。还有,假设我们有班狗班动物班, 所以狗类是动物类,狗类
将继承动物的所有特征,可能还有更多。

如果使用继承,则在两个类之间定义“is-a”关系。也就是说,
ChildClass
是一个
ParentClass

另一方面,内部类并不总是与外部类直接相关。拥有内部类的主要原因是外部类在不让其他类知道的情况下利用其特性


我能想到的最好的例子就是
LinkedList
。它使用某种私有的
节点
类来存储每个元素的内容。当然,单个
节点
不是
链接列表
。。。但是
LinkedList
不能工作,除非它由
节点组成。除了
LinkedList
之外,任何类都没有理由知道
节点
类存在。

子类继承其父类的变量和方法,而内部类不继承

因此,当子类应该有其父类的成员时,您可能希望使用子类;当您只需要内部类来执行它的一部分时,您可能希望使用内部类

e、 g您将在名为列表的类中使用名为Node的内部类,以便可以将Node用作成员


e、 g您可以在名为Car的类中使用名为Mercedes的子类,因为Mercedes应该继承Car的成员并在需要时重写Car的方法。

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

  • 内部类在同一个文件中,而子类可以在另一个文件中,可能在另一个包中
  • 如果没有包含内部类的类的实例,则无法获取内部类的实例
  • 内部类有它们想要的方法,而子类有它们父类的方法。子类当然可以定义额外的方法,但它们总是拥有其父类的方法
关于情况:

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

无法通过内部类扩展第三方代码。请键入“Java中的内部类与子类”,然后查看发生了什么内部类与子类无关。如果要扩展父类或存在“是”关系,请使用继承。内部类不一定如此。它们可以(例如)用作小型助手类,比如在
Map
实现中,
Entry
类是嵌套的。内部类和子类之间的差异太大,无法计数,它们远远超出了明显的“is-a”与“has-a”问题。我建议你继续研究这两者,如果你认为它们是可以互换的,彼此之间没有“好处”。事实上,这与事实相差甚远。你是故意把“has-a”和“is-a”混在一起的吗?@Tom你说的混在一起是什么意思?@Tom是的,我知道这有多混乱,谢谢你“修复”了错误的东西。。。你没有修正任何东西,你只是在答案的末尾移动了一个正确的句子。你仍然说“一个子类本质上共享一个”与其父类有一种“关系”,这显然是错误的。@ManishMallavarapu你仍然把它颠倒过来。子类共享一个“is-A”rela