gpt4 book ai didi

java - 使用super().method时,这种情况调用了哪些方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:24:05 24 4
gpt4 key购买 nike

假设您有一个 BlahChild 类型的对象,它是 BlahParent 的扩展,当 BlahChild 调用 super().someMethod 并且 someMethod 包含对另一个函数的调用时会发生什么,anotherMethod() 也在 BlahChild 中被覆盖?

调用的是 BlahChild 的另一个方法,还是 BlahParent 的另一个方法?

最佳答案

非静态方法总是virtual在 Java 中,所以

来自维基百科:

In Java, all non-static methods are by default "virtual functions." Only methods marked with the keyword final, which cannot be overridden, along with private methods, which are not inherited, are non-virtual.

它将调用 BlahChilds 实现。

示例:

class Parent {
public void method() {
System.out.println("Parent: method");
someOtherMethod();
}
public void someOtherMethod() {
System.out.println("Parent: some other");
}
}


class Child extends Parent {

@Override
public void method() {
System.out.println("Child: method");
super.method();
}

@Override
public void someOtherMethod() {
System.out.println("Child: some other");
}
}

public class Test {
public static void main(String[] args) {
new Child().method();
}
}

输出:

Child: method
Parent: method
Child: some other // <-- Child.someOtherMethod gets called, from Parent.method

关于java - 使用super().method时,这种情况调用了哪些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116734/

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