这是关于子类和超类的

时间:2019-07-15 08:52:11

标签: java inheritance

我想问一些概念:
子类的对象属于父超类。 父类的方法是否存在于子类的内存中?将父类的属性和方法复制到子类中? 子类对象如何操纵父类的属性和方法?

thx。

2 个答案:

答案 0 :(得分:1)

  

子类的对象属于父超类。

“属于”是较差的术语。更好的说法是,对象为C类的实例也是{em> C的直接超类的实例。 (实际上,它是C的所有超类的 实例。)

  

父类的方法是否存在于子类的内存中?

您在这里有一个基本的误解。方法在类的内存中不存在。或实例的内存。

它们实际上保存在与类和实例分开的内存中。

与您所说的最接近的是,类 descriptor 将包含对方法的内部引用。但这一切都是看不见的,细节不应该让您担心。

相比之下,对象(由类定义)的(非static)属性实际上是对象的一部分。确实,子类和所有超类定义的属性是同一对象的 all 部分。

这样想:

  • 动物有腿。
  • 猫是动物。
  • 狗是动物。
  • 猫有胡须。
  • 狗的小岛的腿是小岛的一部分。
  • 蓬松的猫的腿是蓬松的一部分。
  • 蓬松的猫的胡须是蓬松的一部分。
  

子类对象如何操纵父类的属性和方法?

对象不“操纵”方法。他们称呼他们。他们如何称呼它们取决于实现,但是从概念上来说他们在类描述符中找到它们。

通过引用对象查看对象的方法访问属性。由于子类和超类属性都属于同一个对象(请参见上文!),因此它们的访问方式相同。

答案 1 :(得分:0)

它只是字面上的扩展。就像您将超类主体并为其添加子类代码以创建新类一样。有一些细微的差异,例如  在子类中拥有两个版本的相同方法的能力,例如methodA()super.methodA()Subclass的实例可以被视为SubclassSuperclass(同态) 。但是总的来说,您可以通过具有所有属性和子类定义的子类来考虑它。