首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java构造函数的默认访问修饰符

Java构造函数的默认访问修饰符
EN

Stack Overflow用户
提问于 2012-11-24 20:53:04
回答 4查看 53.9K关注 0票数 26

谁能解释一下显式无参数构造函数(和其他构造函数)的默认访问修饰符是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-24 21:03:33

在这方面,构造函数和方法是一样的--如果你没有给出一个显式的public,private或者protected,那么构造函数就会得到默认的"package private“可见性。它可以从同一个类中调用,也可以从同一个包中的任何其他类调用,但不能从不同包中的子类调用(因此,如果一个类只有包可见的构造函数,那么任何子类都必须在同一个包中)。

私有构造函数可防止任何其他类实例化此构造函数,但您可以在调用其自己的私有构造函数的类中使用公共静态工厂方法。这是像单例这样的东西的常见模式。

票数 56
EN

Stack Overflow用户

发布于 2012-11-24 20:55:27

JLS 8.8.9默认构造函数

如果类不包含构造函数声明,则自动提供不带参数的默认构造函数:

如果类被声明为public,则默认构造函数被隐式地赋予访问修饰符public;

如果类被声明为protected,则默认构造函数被隐式地赋予访问修饰符protected;

如果类声明为private,则默认构造函数被隐式赋予访问修饰符private;否则,

默认构造函数具有无访问修饰符所隐含的默认访问权限。

票数 37
EN

Stack Overflow用户

发布于 2012-11-24 22:03:18

-当没有访问修饰符被显式定义为时,constructor将具有类型为default的修饰符。所以这个构造函数将有一个包级别的访问。在该包中定义为具有此默认构造函数的类的类将能够访问它,并且扩展包含默认构造函数的类的类也将能够通过继承访问它。

-如果构造函数被设为private,那么只有类中的代码才能访问它。

单例示例

代码语言:javascript
复制
public class Test {

  private static Test uniqueInstance = new Test();

  private Test(){}

  public static Test getInstance(){

    return uniqueInstance;

 }


}

类中的-甚至非静态 inner classes都可以通过访问其私有成员,反之亦然。

例如:

代码语言:javascript
复制
public class T {


    private T(){

        System.out.println("Hello");
    }

    class TT{

        public TT(){

            new T();
        }
    }

    public static void main(String[] args){

        T t = new T();
        T.TT i = t.new TT();

    }

}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13541386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档