外部类可以访问内部类私有构造函数?
public class Test {
public static  class TypeDescriptor {
private TypeDescriptor() {
System.out.println("aaaaaaaaaaaa");
}
private void fff(){
System.out.println("bbbbbbbbbbbb");
}
}
public static final TypeDescriptor BOOLEAN = new TypeDescriptor();
public static void main(String[] args){
BOOLEAN.fff();
}
}

解决方案 »

  1.   

    你也可以这样调用
    public static final TypeDescriptor BOOLEAN = new TypeDescriptor(); 不用这样new Test.TypeDescriptor().fff(); 
      

  2.   

    private TypeDescriptor() 
    不是定义为private么,
      

  3.   

    楼主的意思是不是问,在类的外部是不是可以通过调用私有函数(或方法,不知道大家要不要分清楚函数和方法,就当是一样吧,都有返加值,权当void也是一种类型,那就都是函数),至于是不是构造函数倒是无所谓的。
    说实话,这是一种破坏规则的方法,不过还是有办法可以做到,就是reflect。
    利用反射机制可以取到类的私有方法和构造函数,然后将其改为public的就可以使用了,当然还是通过反射的方法。
    这也就是为什么我们实现单例时最好的实现是在把构造函数私有化的同时,再在这个函数里抛出一个异常的原因了。这才可能保证没有人可以破坏规则。
    不过这种方法,在做测试的时候特别有用,如是想使用JUnit测试私有方法,这个就是一种很不错的途径,在不进入类内部的情况下测试私有成员和函数。
      

  4.   

    不能
    老师是这么说的
    至于reflection的话...最近才知道还有这个东西的.....还在测试这个东西怎么用的,NO COMMENT
      

  5.   

    可以利用反射   类名.class.方法
      

  6.   

    可以理解为单态设计模式
    既然在外部声明了静态成员方法 当然可以调用私有的fff方法了
    不知道解释的明不明白。
    楼主可以看看单台设计模式的介绍 自己领会下
      

  7.   

    public class Test { 
    public static  class TypeDescriptor { //静态内部类,不能访问外部类成员的,跟外部类只是名称空间上的关联
    private TypeDescriptor() { //私有构造方法,只能在TypeDescriptor 类中实例化自己,别的地方就不能实例化了
    System.out.println("aaaaaaaaaaaa"); 

    private void fff(){ 
    System.out.println("bbbbbbbbbbbb"); 


    public static final TypeDescriptor BOOLEAN = new TypeDescriptor(); 
    public static void main(String[] args){ 
    BOOLEAN.fff(); 


      

  8.   

    外部类是可以访问内部类的, 不管这个内部类的构造是公有的还是私有的. 但是访问是通过外部类进行访问的, 
    外部类.内部类 name = 外部类的对象.new 内部类();
    如下所示: 
    public class Out {
        class Inner {
           private String s;
           private Inner(String s) {
              this.s = s;
           }
           public void pin() {
              System.out.println(s);
           }
        }
        public static void main(String[] args) {
          Out out = new Out();
          Out.Inner in = out.new Inner("hello, world");
        }
    }
      

  9.   

    谢谢各位的热心关注,
     不过还有以下疑问:
      
    TO hmsuccess 
     这就是内部类的好处了,它可以访问外部类,内部类就相当于外部类的属性方法,既然是外部类的属性, 
       他当然就能访问所属的类的其他任何方法。
         这样的话,将构造子定义为私有,是什么用意啊 TO AnnaFlying 
          Out.Inner in = out.new Inner("hello, world"); 
       这么说是把原例中的      
        public static final TypeDescriptor BOOLEAN = new TypeDescriptor();  
      原型应为
         public static final TypeDescriptor BOOLEAN = new Test.TypeDescriptor();
      了