当前位置: 首页 > 知识库问答 >
问题:

如何在子类对象中调用父类的定义方法?

暨鹭洋
2023-03-14

这是一个与实现相关的问题,或者我可能想多了。假设我有一个子类继承了父类。根据我的理解,它将继承父类的方法定义,而不是构造函数。我们需要通过超级方法调用提供或编译器将提供构造函数。我们这样做的原因是,如果没有父类对象实例,我们从子类中的父类获得的方法定义将不存在。

这是否意味着,当我调用父类对象定义的方法(该方法尚未在子类中重写)时,将在父对象实例的子类内部调用?我在想,由于子类会调用父类构造函数并生成它的一个实例,所以情况也会是这样。

共有1个答案

商畅
2023-03-14

我想你已经被“构造器”这个术语误导了。如果措辞是“初始化器”,我想那会更清楚--但既定的术语是“构造器”。

如果您的子类sub扩展了父类parent,则创建sub实例将不会创建第二个单独的parent实例。

sub构造函数调用super()构造函数时,这仅仅意味着parent类中描述的方面按照parent构造函数所希望的方式进行初始化,例如,用适当的值填充parent中定义的字段。这个super()构造函数html" target="_blank">调用不构造/创建一个新实例,而是初始化唯一实例的parent定义的部分,这就是为什么我认为“构造函数”这个名称具有误导性。

super()调用之后,您的sub构造函数可以自由地执行它的任务。所有这些都发生在一个实例上,该实例组合了来自两个类的字段(和方法)。

因此,当您在sub实例上调用parent定义的方法时,没有单独的parent实例可以接收调用,它都发生在单个sub实例上。由于该方法是在parent内部定义的,因此它不了解parentSub扩展,例如,不能访问在Sub中定义的字段(除非使用反射这样的“肮脏的把戏”)。

如果愿意,可以将sub实例视为parent实例,在该实例的末尾添加了一些字段和方法。parent定义的方法在实例(1)的parent部分上工作,sub方法查看完整的实例。

我们这样做的原因是,如果没有父类对象实例,我们从子类中的父类获得的方法定义将不存在。

所以,这不是真的。“父类对象实例”不存在(至少不是与子类对象实例不同的实例),它是子类实例的第一部分,然后是子类字段。

(1)有一些注意事项,例如,如果sub类中重写了parent方法,但IMHO超出了本问题的范围。

 类似资料:
  • 问题内容: 我有以下课程 这只是我实际架构的简化版本。最初,我不知道需要创建的人员类型,因此处理这些对象创建的函数将常规对象作为参数。 现在,我想使用此父类对象访问子类的方法。我还需要不时访问父类方法,所以 我不能 使其 抽象 。 我想我在上面的示例中简化太多了,所以这是实际的结构。 if语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多

  • 这是我的代码想要使用AdapterVersion(父类)的对象引用访问AdapterVer1 getAdaptObj1()的子类方法(没有类型转换)

  • 问题内容: 在Python中创建简单的对象层次结构时,我希望能够从派生类中调用父类的方法。在Perl和Java中,有一个用于此的关键字()。在Perl中,我可以这样做: 在Python中,似乎必须从子代中明确命名父类。在上面的示例中,我将不得不执行。 这似乎不正确,因为这种行为使创建深层次结构变得困难。如果孩子们需要知道哪个类定义了一个继承的方法,那么就会造成各种各样的信息痛苦。 这是python

  • 大家好,我对java很陌生,还在学习OOP原理。直接回答问题。所以我有一个抽象类和两个继承自它的类。看起来是这样的: 现在我做到了: 在这一点上,我想做或(当然不是两者都做,因为我创建了一个孩子),但我两者都不能做。

  • 本文向大家介绍C#中子类调用父类的实现方法,包括了C#中子类调用父类的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中实现子类调用父类的方法,分享给大家供大家参考之用。具体方法如下: 一、通过子类无参构造函数创建子类实例 创建父类Person和子类Student。 在客户端通过子类无参构造函数创建子类实例。 输出结果: 可见:通过调用子类无参构造函数创建子类实例,会默认调用父

  • 所以我有三节课。 公共A类{} 公共类B扩展A{} 公共类C扩展了B{} 我已经实例化了一个A对象作为新的C对象。我试图从C调用一个方法,但它不起作用。我想过让类抽象,但类B和类C有不同的方法,所以如果我这样做,我将在B和C中使用空方法。即使我让它抽象,方法也必须在B而不是C中生成,因为我认为抽象就是这样工作的。 所以我的问题是,如果我将一个方法实例化为一个对象,我如何从C中调用它?