当前位置: 首页 > 面试题库 >

多态和构造函数

楮杰
2023-03-14
问题内容

我是AP Java学生,正在为考试做练习。我遇到了这个问题,但我不明白答案:

考虑以下类别:

public class A
{
  public A() { methodOne(); }

  public void methodOne() { System.out.print("A"); }
}

public class B extends A
{
  public B() { System.out.print("*"); }

  public void methodOne() { System.out.print("B"); }
}

执行以下代码后输出是什么:

A obj = new B();

正确答案是B *。有人可以向我解释方法调用的顺序吗?


问题答案:

B构造函数被调用。B构造函数的第一条隐式指令是super()(调用超类的默认构造函数)。因此,调用了A的构造函数。A的构造函数调用super(),它调用java.lang.Object构造函数,该构造函数不输出任何内容。然后methodOne()被称为。由于对象的类型为B,因此methodOne将调用B的版本并B进行打印。然后,B构造函数继续执行并被*打印。

必须注意的是,从构造函数中调用可重写方法(就像A的构造函数一样)是非常糟糕的做法:它在尚未构造的对象上调用方法。



 类似资料:
  • 问题内容: 码: 输出: 为什么以这种方式打印? 问题答案: 当您在运行时调用多态方法时,Java使用特殊的数据结构来决定需要调用哪个类的方法。在构造对象时,即 在执行用户提供的任何构造函数和初始化程序代码之前,都会 建立此结构。 创建时,在输入的构造函数 之前 已准备好“何时调用,则需要调用或” 的数据结构。由于此结构是为类准备的,因此即使调用代码在内部的构造函数中,它也指向。这就是为什么您看到

  • 本文向大家介绍解析C#中的私有构造函数和静态构造函数,包括了解析C#中的私有构造函数和静态构造函数的使用技巧和注意事项,需要的朋友参考一下 私有构造函数 私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。例如: 声明空构造函数可阻止自动生成默认构造函数。注意,如果您不对构造函数使用访问

  • 问题内容: 什么时候应该使用构造函数,什么时候应该使用静态方法? 您能用小片段解释一下吗?我略读了一些线程,但是我仍然不清楚。 问题答案: 当您只想返回该类型的新对象并且希望简单时,请使用公共构造函数。 一个很好的例子是StringBuilder,因为它是可变的,您可能每次都想要一个新对象。 当您可能想重用对象(尤其是不可变的对象),返回子类或描述结构时,请使用静态因子方法。一个很好的例子是Enu

  • 本文向大家介绍C#静态构造函数?相关面试题,主要包含被问及C#静态构造函数?时的应答技巧和注意事项,需要的朋友参考一下 最先被执行的构造函数,且在一个类里只允许有一个无参的静态构造函数 执行顺序:静态变量>静态构造函数>实例变量>实例构造函数  

  • 问题内容: 我开始学习JAXB,所以我的问题可能很愚蠢。现在我有了类,想要生成XML Schema。在执行此指令后,我得到了异常 IllegalAnnotationExceptions …没有无参数的默认构造函数。 是的 我的课程没有默认的无参数构造函数。太容易了 我有类与包可见的构造函数/ final方法和偏离路线的参数。我应该怎么做-创建一些特定的momemto / builder类或将我的构

  • 类构造函数 类constructor是类的特殊成员函数,只要我们创建该类的新对象,就会执行该函数。 构造函数与类具有完全相同的名称,它根本没有任何返回类型,甚至无效。 构造函数对于为某些成员变量设置初始值非常有用。 下面的例子解释了构造函数的概念 - #include <iostream> using namespace std; class Line { public: voi