前端之家收集整理的这篇文章主要介绍了
java – 多态和构造函数,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是一名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类的默认构造
函数).所以A的构造
函数被
调用. A的构造
函数调用super(),它
调用不打印任何东西的java.lang.Object构造
函数.然后
调用methodOne().由于对象是类型B,所以
调用B的methodOne版本,并打印B.然后B构造
函数继续执行,*被打印.
必须注意的是,从构造函数(如A的构造函数)调用可覆盖的方法是非常糟糕的做法:它调用一个尚未构造的对象的方法.
原文链接:https://www.f2er.com/java/124300.html