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

当通过父类间接调用子类时,子类是否会调用覆盖方法?

龙德润
2023-03-14

如果类A中的方法调用类B中的父方法,该方法调用类B中的方法X,该方法X在类A中被重写,将调用方法X的哪个实现?子类A中的重写实现还是父类B中的原始实现?

从我的代码中,我看到重写方法被调用,但是我想象如果一个方法是从一个类中调用的,那么这个方法就不会是子类中的重写方法。我猜如果一个子类调用父类中的一个方法,该方法调用子类中重写的方法,重写的方法将被调用?那是对的吗?为什么啊?

共有2个答案

梁丘诚
2023-03-14

对于非静态方法,JRE查找覆盖并调用子方法,即使调用方是父方法中的方法。

静态方法不重写。

唐麒
2023-03-14

想想父类中的抽象方法,它可能被父类的其他非抽象方法调用(是的,它编译了!)

它总是一个虚拟方法调用,总是子方法的实现(当然除了静态方法和私有方法)。

这是为了让父对象可以调用子对象的重写方法。

 类似资料:
  • 这是一个更大的项目,所以我将简化结构,不包括这里涉及的所有代码,但我想知道这在概念上是否可行,以及我可能遇到的潜在障碍。 我从主类中得到了几个级别的子类,其中一个级别包含方法age()(从顶部超类重写),该方法调用useEnergy()。此类的直接子类重写age()。该类的直接子类需要重写useEnergy(),但被重写方法中的代码永远不会执行(通过System.out.printlns验证)。有

  • 问题内容: 我有这样的代码: 为什么我不能在第(5)行中打电话;在第(6)行中将为哪个类调用? 问题答案: 您不能这样做,因为子类的方法不在您的超类中。在这种情况下,尽管String是Object的子类,因为在java.lang.Object类中未声明length(),但无法在其实例上调用length。 但是equals()方法在字符串类中被覆盖,因此将调用Strings的equals()

  • 问题内容: 指这里 A是预编译的Java类(我也有源文件)B是我正在编写的Java类 B扩展了A。 如何实现逻辑,以便A可以调用B拥有的方法。 以下是条件: 我不想触摸A(尽管没有其他解决方案,但这只是最后一个选择)。 我不想使用反射。 如前所述,如果需要,我可以修改A。哪种方式可能是可行的解决方案? 问题答案: 类应该定义将要调用的方法(可能是抽象方法,根据Paul Haahr的出色指南,A应该

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

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

  • 我有3个子类,每个都有唯一的ImagePath。 因此,我实现了,因为所有实例共享相同的映像。 问题就在这里。我想从父实例调用子静态方法。 当然,我可以使用调用基于类的静态方法。 假设我有10个子类,使用if-else语句并逐个调用它并不容易。 在Java中有没有办法从父实例调用子静态方法??