Java继承与多态:阿里面试题解析

需积分: 0 3 下载量 75 浏览量 更新于2024-09-11 收藏 258KB DOC 举报
"阿里面试题" 在阿里集团的面试中,可能会遇到类似如下的编程题目,主要考察的是面向对象编程的基础知识,特别是继承、构造器以及方法重写的概念。题目给出了一段Java代码,包含一个基类`Base`和一个派生类`Derived`。现在我们来详细分析这段代码及其运行结果。 首先,我们看代码的结构: 1. `Base`类有一个整型变量`i`初始化为99,并且有一个名为`amethod`的方法,该方法打印出"Base.amethod()"。 2. `Base`类的构造器调用了`amethod`方法。 3. `Derived`类继承了`Base`类,同样有一个整型变量`i`初始化为-1,也重写了`amethod`方法,打印出"Derived.amethod()"。 4. `Derived`类有一个`main`方法,用于程序的入口。在`main`方法中,创建了一个`Derived`类型的对象`b`,但是通过`Base`类的引用来访问它。然后打印`b.i`的值,并调用`b.amethod()`。 当尝试编译并运行这段代码时,我们需要考虑以下几点: - 类`Derived`继承了类`Base`,所以`Derived`的对象可以被视为`Base`类型的对象。这就是为什么可以在`main`方法中使用`Base`类型的引用`b`来创建一个`Derived`对象。 - 当创建`Derived`对象时,会先执行`Base`类的构造器,因为这是继承链上的父类构造器。在`Base`的构造器中,调用了`amethod()`,由于此时对象实际上是`Derived`类型,因此会调用`Derived`类中重写的方法,打印"Derived.amethod()"。 - 接下来,`System.out.println(b.i)`会打印`b`对象的`i`变量的值。虽然`b`是`Base`类型的引用,但它指向的是`Derived`对象,因此会打印`Derived`类中的`i`值,即-1。 根据以上分析,我们可以得出正确的运行结果: - `b.i`的值为-1,因为`b`实际上是一个`Derived`对象,即使它是通过`Base`类型引用的。 - 调用`b.amethod()`会执行`Derived`类中的`amethod`方法,因为这是覆盖了`Base`类的方法。因此,会打印"Derived.amethod()"。 所以,正确答案应该是:`Derived.amethod() -1 Derived.amethod()`。然而,由于原始问题的选项格式不完整,无法确定具体选项。但根据我们的分析,选项应对应于上述的运行顺序。