gpt4 book ai didi

java - 多态性和构造函数

转载 作者:太空狗 更新时间:2023-10-29 22:43:27 24 4
gpt4 key购买 nike

我是一名 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()(调用父类(super class)的默认构造函数)。所以A的构造函数被调用。 A 的构造函数调用 super(),它调用 java.lang.Object 构造函数,它不打印任何内容。然后调用 methodOne()。由于对象是类型 B,因此调用 B 版本的 methodOne,并打印 B。然后 B 构造函数继续执行,并打印 *

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

关于java - 多态性和构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10404879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com