gpt4 book ai didi

java - 构造函数的私有(private)范围

转载 作者:行者123 更新时间:2023-12-01 16:40:24 24 4
gpt4 key购买 nike

鉴于此代码片段,您能解释一下为什么它有效吗?

问题是类构造函数被标记为私有(private),所以它不应该阻止我们用 new 运算符调用它吗?

public class Alpha {
protected Alpha() {}
}
class SubAlpha extends Alpha {
private SubAlpha() {System.out.println("ok");}
public static void main(String args[]) {
new SubAlpha();
}
}

这一切都有效,因为静态方法是类的一部分,它可以看到所有私有(private)字段和方法,对吧?在这个"new"初始化之外永远不会工作?

最佳答案

您的问题中唯一的私有(private)构造函数是SubAlpha,它是SubAlpha本身正在调用的。没问题,类可以调用自己的私有(private)方法。 Alpha 构造函数是 protected ,因此 SubAlpha 可以访问它。

编辑:重新编辑:是的,完全正确。 单独的类(无论是否是子类)无法访问 SubAlpha 的私有(private)构造函数,并且无法成功构造 new SubAlpha().

示例1:

public class Beta
{
public static final void main(String[] args)
{
new SubAlpha();
// ^--- Fails with a "SubAlpha() has private access in SubAlpha"
// compilation error
}
}

示例2:

public class SubSubAlpha extends SubAlpha
{
private subsubAlpha()
{
// ^== Fails with a "SubAlpha() has private access in SubAlpha"
// compilation error because of the implicit call to super()
}
}

这当然是特定于构造函数的,因为范围始终是特定于成员的。如果一个类有一个不同的构造函数,该构造函数具有不同的签名和较少的限制范围,则使用它的类(包括子类)可以使用其他构造函数签名。 (对于子类,需要显式调用 super(args);。)

关于java - 构造函数的私有(private)范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4244731/

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