gpt4 book ai didi

java - 内部类构造函数调用

转载 作者:行者123 更新时间:2023-12-01 22:36:20 25 4
gpt4 key购买 nike

JLS 说:

The constructor of a non-private inner member class implicitly declares, as the first formal parameter, a variable representing the immediately enclosing instance of the class.

<小时/>

好的,如果我们编写以下内容:

A类:

package org.gradle;

public class A extends B.Inner{

public A(B b){
b.super(); //OK, invoke B.inner(B)
}
}

B 类:

package org.gradle;

public class B{

public class Inner{
}
}

如前所述hereb.super()实际上调用B.Inner(B)

<小时/>

但是如果我们写

B 类:

package org.gradle;

public class B {
class Inner{
public Inner(B b){
System.out.println("Inner(B)");
}
}
}

A类:

package org.gradle;

public class A extends B.Inner{

public A(B b) {
b.super(); //The constructor B.Inner() is undefined
}
}

因此,在后一个示例中,b.super() 尝试调用 B.Inner()。为什么差别这么大?

最佳答案

它确实尝试在第二个示例中调用 B.Inner(B)

它找不到它,因为只有一个B.Inner(B, B)。如果您的构造函数是 B.Inner() 那么它会更改为 Inner(B)...并且如果您的构造函数是 B.Inner(B) 然后它被更改为 B.Inner(B, B)

请注意,隐藏参数实际上是一个实现细节,除非您正在研究 Java 编译器的工作原理,否则您不需要知道它的存在。

关于java - 内部类构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26814865/

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