A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-2-6 15:46 编辑

package com.itcast

public class Outer{
    private int outProp=9;
    class Inner{
        private int inProp=5;
        public void accessOuterProp(){
                System.out.println("外部类的outProp属性值:"+outProp);
        }
    }
        public void accessInnerProp(){
                System.out.println("内部类的inProp=5属性值:"+new Inner().inProp);
        }
        
        public static void main(String[] args){
                Outer out=new Outer();
                out.accessInnerProp();
        }

}

照理来说这里内部类里的实例属性inProp的访问控制权限是private应该只能在内部类Inner里可见,为什么在外部类的实例方法里可以直接通过new一个内部类对象访问到该属性,我觉得应该在内部类里写一个public的getter方法在外部类的实例方法里通过new Inner().getInProp()这样才访问的到呀 这里为什么可以直接通过new Inner().内部类属性直接访问到该private级别的值?

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
你在out.accessInnerProp();new 了个new Inner()  这个new Inner()是在Outer out=new Outer()  这个对象里面的 ,在图中new Inner()相当于是new Outer() 成员
private修饰的 ,是可以被本类访问。本类访问本类的私有成员,可以访问吗?可以


heima11.JPG (52.71 KB, 下载次数: 11)

heima11.JPG

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
楼主,咱们这么理解,私有属性属于对象,如果外界可以new出来私有属性所属的对象,那么对象可以访问自己的私有属性.

也就是说,在你的代码中  new Inner()是建立了一个内部类对象,   这个内部类对象当然可以访问自己的私有属性,
回复 使用道具 举报
private是私有属性,如果对象可以调用对方的成员变量或方法只能说明这个成员变量或方法是静态的,是他们公用的。保护控制在类的级别上,而不是对象的级别上
通过new Inner().getInProp()   这样是外部类调用的,如: new Outer().getInProp();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马