我想问一些概念:
子类的对象属于父超类。
父类的方法是否存在于子类的内存中?将父类的属性和方法复制到子类中?
子类对象如何操纵父类的属性和方法?
thx。
答案 0 :(得分:1)
子类的对象属于父超类。
“属于”是较差的术语。更好的说法是,对象为C
类的实例也是{em> C
的直接超类的实例。 (实际上,它是C
的所有超类的 实例。)
父类的方法是否存在于子类的内存中?
您在这里有一个基本的误解。方法在类的内存中不存在。或实例的内存。
它们实际上保存在与类和实例分开的内存中。
与您所说的最接近的是,类 descriptor 将包含对方法的内部引用。但这一切都是看不见的,细节不应该让您担心。
相比之下,对象(由类定义)的(非static
)属性实际上是对象的一部分。确实,子类和所有超类定义的属性是同一对象的 all 部分。
这样想:
子类对象如何操纵父类的属性和方法?
对象不“操纵”方法。他们称呼他们。他们如何称呼它们取决于实现,但是从概念上来说他们在类描述符中找到它们。
通过引用对象查看对象的方法访问属性。由于子类和超类属性都属于同一个对象(请参见上文!),因此它们的访问方式相同。
答案 1 :(得分:0)
它只是字面上的扩展。就像您将超类主体并为其添加子类代码以创建新类一样。有一些细微的差异,例如
在子类中拥有两个版本的相同方法的能力,例如methodA()
和super.methodA()
或Subclass
的实例可以被视为Subclass
和Superclass
(同态) 。但是总的来说,您可以通过具有所有属性和子类定义的子类来考虑它。