外部类可以访问内部类私有构造函数?

jiapk 2008-03-06 05:48:09
外部类可以访问内部类私有构造函数?


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();
}
}

...全文
803 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiapk 2008-03-10
  • 打赏
  • 举报
回复
谢谢各位的热心关注,
不过还有以下疑问:

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();
AnnaFlying 2008-03-09
  • 打赏
  • 举报
回复
外部类是可以访问内部类的, 不管这个内部类的构造是公有的还是私有的. 但是访问是通过外部类进行访问的,
外部类.内部类 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");
}
}
ninesea 2008-03-08
  • 打赏
  • 举报
回复
有意思 看的几本书还都没说过这个问题 跟着书的思想走都是内部类访问外围类的成员对象 根本就没想过外围类访问内部类的问题
试了一下 的确可以 哈哈
zjhlht 2008-03-08
  • 打赏
  • 举报
回复
学习了~~~~~~
zapdos 2008-03-08
  • 打赏
  • 举报
回复
是的,无须授权
宿主和内部类都可以任意调用所有变量和方法
may310 2008-03-08
  • 打赏
  • 举报
回复
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();
}
}
ashutc 2008-03-08
  • 打赏
  • 举报
回复
可以理解为单态设计模式
既然在外部声明了静态成员方法 当然可以调用私有的fff方法了
不知道解释的明不明白。
楼主可以看看单台设计模式的介绍 自己领会下
hmsuccess 2008-03-07
  • 打赏
  • 举报
回复
这就是内部类的好处了,它可以访问外部类,内部类就相当于外部类的属性方法,既然是外部类的属性,
他当然就能访问所属的类的其他任何方法。
jiapk 2008-03-07
  • 打赏
  • 举报
回复
private TypeDescriptor()
不是定义为private么,
kobezhao_4626968 2008-03-07
  • 打赏
  • 举报
回复
可以利用反射 类名.class.方法
dai03070609 2008-03-07
  • 打赏
  • 举报
回复
可以试试这个例子啊,外部类可以访问内部类的私有成员和函数
nihuajie05 2008-03-07
  • 打赏
  • 举报
回复
不能
老师是这么说的
至于reflection的话...最近才知道还有这个东西的.....还在测试这个东西怎么用的,NO COMMENT
夏至夕陽 2008-03-07
  • 打赏
  • 举报
回复
应该可以,
zzr82528 2008-03-07
  • 打赏
  • 举报
回复
楼主的意思是不是问,在类的外部是不是可以通过调用私有函数(或方法,不知道大家要不要分清楚函数和方法,就当是一样吧,都有返加值,权当void也是一种类型,那就都是函数),至于是不是构造函数倒是无所谓的。
说实话,这是一种破坏规则的方法,不过还是有办法可以做到,就是reflect。
利用反射机制可以取到类的私有方法和构造函数,然后将其改为public的就可以使用了,当然还是通过反射的方法。
这也就是为什么我们实现单例时最好的实现是在把构造函数私有化的同时,再在这个函数里抛出一个异常的原因了。这才可能保证没有人可以破坏规则。
不过这种方法,在做测试的时候特别有用,如是想使用JUnit测试私有方法,这个就是一种很不错的途径,在不进入类内部的情况下测试私有成员和函数。
hmsuccess 2008-03-06
  • 打赏
  • 举报
回复
你也可以这样调用
public static final TypeDescriptor BOOLEAN = new TypeDescriptor(); 不用这样

new Test.TypeDescriptor().fff();
hmsuccess 2008-03-06
  • 打赏
  • 举报
回复
一般情况下,内部类是可以访问外部类的私有数据
hmsuccess 2008-03-06
  • 打赏
  • 举报
回复
私有构造函数?什么意思

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧