Will the compiler-generated default constructor be public?

为君一笑 提交于 2019-12-01 04:26:23

It depends on your class visibility.The compiler uses the class visibility and generates a no-arg default constructor with the same visibility

As said in JLS

If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided:

  1. If the class is declared public, then the default constructor is implicitly given the access modifier public;
  2. If the class is declared protected, then the default constructor is implicitly given the access modifier protected;
  3. If the class is declared private, then the default constructor is implicitly given the access modifier private;
  4. Otherwise, the default constructor has the default access implied by no access modifier

As classes visibility is public, it will always be a public constructor.

It will be public as the class visibility is public

public Widget() {}

It will be public Widget() {}

Depends on class visibility. For your class dafault constructor is going to be public.

In a class type, if the class is declared public, then the default constructor is implicitly given the access modifier public (§6.6); if the class is declared protected, then the default constructor is implicitly given the access modifier protected (§6.6); if the class is declared private, then the default constructor is implicitly given the access modifier private (§6.6); otherwise, the default constructor has the default access implied by no access modifier.

From here.

If your class is public then the default constructor would be public so in your case, Since the Widget class is public its default constructor supplied by the compiler would also be public. See this

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!