nfc*_*-uk 24 java constructor access-modifiers
任何人都可以解释默认访问修饰符对于显式无参数构造函数(以及其他构造函数)的作用吗?
Ian*_*rts 49
构造函数与此方面的方法相同 - 如果您不提供显式public,private或protected,则构造函数将获得默认的"package private"可见性.它可以从同一个类中调用,也可以从同一个包中的任何其他类调用,但不能从不同包中的子类调用(因此,如果一个类只有包可见的构造函数,那么任何子类必须在同一个包中).
私有构造函数阻止任何其他类实例化此类,但您可以在类中调用其自己的私有构造函数的公共静态工厂方法.这是单身人士之类的常见模式.
Sta*_*wed 33
JLS 8.8.9默认构造函数
如果类不包含构造函数声明,则会自动提供不带参数的默认构造函数:
如果该类被声明为public,则默认构造函数被隐式赋予访问修饰符public;
如果该类被声明为protected,则默认构造函数被隐式赋予访问修饰符protected;
如果该类被声明为private,则默认构造函数被隐式赋予访问修饰符private; 否则,
默认构造函数具有无访问修饰符隐含的默认访问权限.
-当没有明确定义访问修饰符时,A constructor 将具有类型的访问控制。所以这个构造函数将有一个Package Level Access。在该包中定义为具有此默认构造函数的类的类将能够访问它,并且扩展包含默认构造函数的此类的类将能够通过继承访问它。default
-如果构造制成private,那么只有这个类中的代码可以访问此。
单例示例
public class Test {
private static Test uniqueInstance = new Test();
private Test(){}
public static Test getInstance(){
return uniqueInstance;
}
}
Run Code Online (Sandbox Code Playgroud)
-即使类中的非静态 inner classes也可以访问其私有成员,反之亦然。
例如:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42075 次 |
| 最近记录: |