gpt4 book ai didi

java - 在编写重写方法时,为什么Java中允许调用另一个父类(super class)方法?

转载 作者:行者123 更新时间:2023-12-01 09:04:06 25 4
gpt4 key购买 nike

今天我无意中在子类中调用了错误的重载 super 方法:

public class Test {
public static class A {
void foo(int p) {
// Do something...
}

void foo() {
foo(-1);
}
}

public static class B extends A {
@Override
void foo(int p) {
super.foo(); // Intended to call super.foo(p), but lost a parameter here
// Do something more...
}
}
}

运行这个程序的时候,它站了一会儿,然后对我喊了一声java.lang.StackOverflowError 。我发现了问题并修复了它,但我不明白为什么这是允许的。

此外,我更改了 super.foo();调用super.equals(""); ,代码仍然可以编译并成功运行。

那么为什么super call可以调用其他一些方法呢?我无法想象这样的用例,也无法通过谷歌搜索找到任何有用的信息。所以我认为这可能应该被视为一个错误?

最佳答案

So why super call is allowed to call some other methods?

因为您的代码可能需要这样做。实际上,它与调用同一类定义的其他方法的方法没有什么不同。请记住,父类(super class)的方法是当前实例的一部分。继承是紧密耦合的。因此,可以使用父类(super class)的任何非私有(private)成员,因为它是实例的一部分,并且不会对子类隐藏。 (private 成员仍然是实例的一部分,但对子类是隐藏的,除非您[ab]使用反射来公开它们。)

值得注意的是,这与这些嵌套类没有任何关系;对于顶级类(class)也是如此。

关于java - 在编写重写方法时,为什么Java中允许调用另一个父类(super class)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41425199/

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