java如何在具有私有构造函数的本地内部类的类之外创建实例?
考虑以下程序:
public class A
{
public static void main(String[] args)
{
class B
{
private B()
{
System.out.println("local");
}
}
// how are we able to create the object of the class having private constructor
// of this class.
B b1= new B();
System.out.println("main");
}
}
输出: 地方的 主要
一个拥有私有构造函数的类意味着我们只能在类内部创建对象,但这里我可以在类外部创建实例。有人能解释一下我们如何在B类之外创建B的对象吗
# 1 楼答案
您甚至可以访问该类的私有变量(试试!)
这是因为您在调用该类的同一个类中定义该类,因此您拥有该类的私有/内部知识
如果您将B类移动到A类之外,它将按预期工作
# 2 楼答案
请参阅JLS 6.6.1:
实现这一点的方法是使用合成的包保护方法
“如果要隐藏内部类的私有成员,可以定义与公共成员的接口,并创建实现此接口的匿名内部类。请参阅this代码:”
# 3 楼答案
因为
Top Level Class
是一个幸福的家庭,每个人都可以互相接触,尽管private
JLS 6.6.1
# 4 楼答案
你是这么说的
A class having private constructor means we can create object inside the class only
但是
这是因为您在
main(String[] args) method
中定义了inner Class
,而不是在Top Level Class
中定义了inner Class
如果你试试看
那么就不能创建内部类B的对象