论坛首页 Java企业应用论坛

请教一个相当基础的问题,Java中为什么拥有类可以访问内部类的私有成员?

浏览 10484 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-15  
public  class  Outer  { 
    public  class  Inner  { 
        private  int  i=0; 
        private  Inner()  { 
            this.i=1; 
        } 
    } 

    public  Inner  getInner()  { 
        return  new  Inner(); 
    } 

    public  static  void  main(String[]  args)  { 
        Outer  outer  =  new  Outer(); 
        Inner  inner  =  outer.getInner(); 
        System.out.println(inner.i); 

    } 


大家都知道非内部类的私有成员只能是类自有方法才能访问,其他类不管用什么方法都不能访问;而在上面代码中,为什么Outer类的main方法能通过Inner类的实例outer访问私有成员i??? 出发点在哪?
   发表时间:2006-09-15  
明明是你用内部类的对象来访问的i这个私有属性的,怎么说是外部类来访问?
关于内部类我做个一个小的总结,你可以参考一下.
http://redhacker.blueidea.com/archives/2006/2923.shtml
0 请登录后投票
   发表时间:2006-09-15  
因为main是Outer本身的方法咯
0 请登录后投票
   发表时间:2006-09-15  
adamzhao 写道
因为main是Outer本身的方法咯
确实是用内部类的对象来访问的i这个私有属性的,难道通过对象就能访问私有属性?换个非内部试试
0 请登录后投票
   发表时间:2006-09-15  
同一楼  外部的out根本就没调用那个private
他调用的是public的get方法
0 请登录后投票
   发表时间:2006-09-15  
ddandyy 写道
同一楼  外部的out根本就没调用那个private
他调用的是public的get方法


public的get方法在哪?
0 请登录后投票
   发表时间:2006-09-15  
gqdou 写道
明明是你用内部类的对象来访问的i这个私有属性的,怎么说是外部类来访问?
关于内部类我做个一个小的总结,你可以参考一下.
http://redhacker.blueidea.com/archives/2006/2923.shtml


谢谢你的总结,不过文章里的结论的第三条写的:
3、外部类对其内部类的属性和方法的访问和访问其他类一样,需要先构造一个对象然后进行访问,不过对于内部类的构造首先要构造一个外部类,进而进一步进行构造内部类。

即然,外部类对其内部类的属性和方法的访问和访问其他类一样,好了,外部类能通过访问其他类的实例访问其他类的私有属性吗?
0 请登录后投票
   发表时间:2006-09-15  
一直想不明白,为什么Java的private关键字到这儿就不灵了,是Java故意如此,还是有什么别的原因?
0 请登录后投票
   发表时间:2006-09-15  
你可以动手试一下,我直接告诉你答案不足让你完全信,实践出真知,你印象会非常深刻.
0 请登录后投票
   发表时间:2006-09-15  
gqdou 写道
你可以动手试一下,我直接告诉你答案不足让你完全信,实践出真知,你印象会非常深刻.

我知道这段代码运行没问题,可我想弄清楚,为什么会这样?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics