gpt4 book ai didi

继承

转载 作者:搜寻专家 更新时间:2023-10-30 21:23:41 27 4
gpt4 key购买 nike

为什么最后打印“I'm a Child Class”。 ?

public class Parent
{
String parentString;
public Parent()
{
System.out.println("Parent Constructor.");
}

public Parent(String myString)
{
parentString = myString;
System.out.println(parentString);
}

public void print()
{
System.out.println("I'm a Parent Class.");
}
}

public class Child extends Parent
{
public Child() {
super("From Derived");
System.out.println("Child Constructor.");
}

public void print()
{
super.print();
System.out.println("I'm a Child Class.");
}

public static void main(String[] args)
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}

输出:

From Derived

Child Constructor.

I'm a Parent Class.

I'm a Child Class.

I'm a Parent Class.

I'm a Child Class.

最佳答案

因为这是 polymorphism 的例子(后期绑定(bind))。在编译时,您指定对象的类型为 Parent,因此只能调用定义在 Parent 中的方法。但是在运行时,当“绑定(bind)”发生时,该方法将在对象上调用,无论在代码中如何引用它,该对象都是 Child 类型。

让您感到惊讶的部分是为什么应该在运行时调用覆盖方法。在 Java 中(与 C# 和 C++ 不同)所有方法都是 virtual因此调用了覆盖方法。参见 this example了解差异。

关于继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506412/

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