JAVA 中外部类可以访问非静态内部类的私有属性???

代码如下:returnnewInnerClass(32).m;竟然编译通过?publicclassOuterClass{privateclassInnerClass{pr... 代码如下:return new InnerClass(32).m;竟然编译通过?
public class OuterClass {
private class InnerClass{
private int m;
InnerClass(int m){
this.m=m;
}
}
public OuterClass(){
}

public int outPut(){
return new InnerClass(32).m;
}
}
展开
 我来答
百度网友faadf46
高粉答主

2020-04-27 · 说的都是干货,快来关注
知道答主
回答量:4556
采纳率:0%
帮助的人:74.5万
展开全部

1、创建一个Bean1类,并建好两个私有变量和构造方法。

2、创建一个Bean2类,引入对应包,创建好main 方法。

3、创建 Class<?> clazz = Class.forName("test.Bean1")。

4、创建Bean1 bean = (Bean1) clazz.newInstance();Field[] fs = clazz.getDeclaredFields()。

5、创建for (Field field : fs)   // 要设置属性可达,不然会抛出IllegalAccessException异常   field.setAccessible(true);// 打印初始值 System.out.println(field.getName() + "===" + field.get(bean));}。

6、执行main方法查看结果。

Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
百度网友fff3ffc
推荐于2017-11-24 · TA获得超过574个赞
知道小有建树答主
回答量:253
采纳率:100%
帮助的人:116万
展开全部
你没好好看书,书上说的很明白了,内部类就相当于一个外部类的成员变量,所以可以直接访问外部变量,外部类不能直接访问内部类变量,必须通过创建内部类实例的方法访问,
new InnerClass(32).m就是创建内部类实例访问内部类成员变量。
你想不通的肯定是指内部类的私有变量怎么可以被外部类访问吧,按常规,私有变量m只能在InnerClass里被访问,
但你要注意,内部类就相当于一个外部类的成员变量,举个例子。
class Outer{
private int m;
private class Inner{
private int n;
private int k;
}
}
m和类Inner都是成员变量,他们之间是平等的,唯一不同的就是Inner它是包装了几个成员变量比如n,k,也就是说m n k是平等的,区别在于访问n k要通过Inner,就是要建立Inner实例访问nk,这样解释够明白了吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昝雨灵4D
2011-11-05 · TA获得超过659个赞
知道答主
回答量:77
采纳率:0%
帮助的人:97万
展开全部
晕!大哥 本质还是没有搞懂呀。
这个程序的本质是这样的:
外部类: OuterClass{ 内部类:InnerClass{内部似有属性:m}}

其实private 意思就是:这个属性只有自己这个类的对象可以调用。其他所有类。包括自己的外部类
OuterClass也不可以直接调用 innerClass的的私有属性(所以 一楼的那位不要误导楼主还不好。)。

所以这个题之所以有结果本身只是这样的:new InnerClass(32)以后 然后用这个类的对象 自己调用自己的私有属性。不是楼主想的那样。
要是还不明白的话。楼主还可以嗨我。
追问
return new InnerClass(32).m;
这句代码指的是外部类的成员函数通过内部类的引用调用内部类的私有成员啊。。。。所以说外部类的成员函数可以访问内部类的私有成员?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
EGCz3605
2019-06-26
知道答主
回答量:37
采纳率:0%
帮助的人:1.1万
展开全部
Java规范里确实规定了外部类可以访问内部类的private/protected变量,就像访问自己的private/protected变量一样.........实际上,编译器实现的时候是这样的:
Outer类和Inner类不再是嵌套结构,而是变为一个包中的两个类,然后,对于private变量的访问,编译器会生成一个accessor函数.......
嗯,反正这条记住就好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没有响应m2
2011-11-05 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3492万
展开全部
new InnerClass(32)
你已经用了new 所以这个innerClass已经实例化了 这个时候当然可以直接用了
毕竟InnerClass也是OuterClass的一部分
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式