注意事项
![](/icons/3004yi.gif)
:在内部类中可以随意使用外部类
![](/icons/3004de.gif)
成员思路方法以及成员变量
众所周知
![](/icons/3004dou.gif)
在定义成员思路方法或者成员变量
![](/icons/3004de.gif)
时候
![](/icons/3004dou.gif)
可以给其加上
![](/icons/3004yi.gif)
些权限
![](/icons/3004de.gif)
修饰词
![](/icons/3004dou.gif)
以防止其他类
![](/icons/3004de.gif)
访问
![](/icons/3004dou2.gif)
如在成员变量或者成员思路方法前面
![](/icons/3004dou.gif)
加上Private关键字
![](/icons/3004dou.gif)
则其他类就无法
![](/icons/3004diaoyong.gif)
这个类中
![](/icons/3004de.gif)
成员思路方法或则和成员变量
![](/icons/3004dou2.gif)
但是
![](/icons/3004dou.gif)
如果这个类有成员内部类
![](/icons/3004dou.gif)
则不受这方面
![](/icons/3004de.gif)
限制
![](/icons/3004dou2.gif)
也就是说
![](/icons/3004dou.gif)
在成员内部类中可以随意引用外部类
![](/icons/3004de.gif)
成员思路方法以及成员变量
![](/icons/3004dou.gif)
即使这些类成员思路方法或者成员变量被修饰了private
![](/icons/3004dou2.gif)
如在成员外部类中定义了
![](/icons/3004yi.gif)
个i变量
![](/icons/3004dou.gif)
并且利用private关键字来修饰
![](/icons/3004dou2.gif)
此时在其他类中是不能够引用这个私有成员变量
![](/icons/3004de.gif)
![](/icons/3004dou2.gif)
但是这个类
![](/icons/3004de.gif)
成员内部类
![](/icons/3004de.gif)
思路方法中
![](/icons/3004dou.gif)
则不仅可以引用这个外部类
![](/icons/3004de.gif)
私有变量
![](/icons/3004dou.gif)
而且还可以对其进行赋值等操作
![](/icons/3004dou2.gif)
这个赋值操作对于外部类也是有效
![](/icons/3004de.gif)
![](/icons/3004dou2.gif)
即成员内部类可以更改外部类中私有变量
![](/icons/3004de.gif)
值
注意事项 2:要在外部类中例子化内部类对象
![](/icons/3004de.gif)
引用
如果
![](/icons/3004yi.gif)
个类定义在另外
![](/icons/3004yi.gif)
个类中
![](/icons/3004dou.gif)
成为成员内部类
![](/icons/3004dou.gif)
此时
![](/icons/3004yi.gif)
定要注意
![](/icons/3004dou.gif)
内部类
![](/icons/3004de.gif)
例子
![](/icons/3004yi.gif)
定要绑定在外部类
![](/icons/3004de.gif)
例子上
![](/icons/3004dou2.gif)
也就是说
![](/icons/3004dou.gif)
要从外部类中
![](/icons/3004chushi.gif)
化
![](/icons/3004yi.gif)
个内部类
![](/icons/3004de.gif)
对象
![](/icons/3004dou.gif)
此时内部类
![](/icons/3004de.gif)
对象就会绑定在外部类
![](/icons/3004de.gif)
对象上
![](/icons/3004dou2.gif)
这跟普通
![](/icons/3004de.gif)
类有所区别
![](/icons/3004dou2.gif)
普通
![](/icons/3004de.gif)
类
![](/icons/3004dou.gif)
创建完的后
![](/icons/3004dou.gif)
不
![](/icons/3004yi.gif)
定马上需要例子化
![](/icons/3004dou2.gif)
在需要用到这个对象
![](/icons/3004de.gif)
时候
![](/icons/3004dou.gif)
再进行例子化即可
![](/icons/3004dou2.gif)
但是
![](/icons/3004dou.gif)
如果
![](/icons/3004yi.gif)
个类成为另外
![](/icons/3004yi.gif)
个类
![](/icons/3004de.gif)
成员内部类
![](/icons/3004dou.gif)
则就区别了
![](/icons/3004dou2.gif)
必须要在外部类中例子化内部类对象
![](/icons/3004de.gif)
引用
![](/icons/3004dou.gif)
以实现将内部类
![](/icons/3004de.gif)
例子绑定在外部类
![](/icons/3004de.gif)
例子上
![](/icons/3004dou2.gif)
简单
![](/icons/3004de.gif)
说
![](/icons/3004dou.gif)
就是在定义外部类
![](/icons/3004de.gif)
时候
![](/icons/3004dou.gif)
如果有成员内部类
![](/icons/3004dou.gif)
那么就不要望了在外部类中利用
![](/icons/3004new.gif)
关键字来例子化内部类对象
![](/icons/3004de.gif)
引用
![](/icons/3004dou2.gif)
而对于外部类来说
![](/icons/3004dou.gif)
则可以在需要
![](/icons/3004de.gif)
时候再进行例子化
![](/icons/3004dou2.gif)
如此就可以保证
![](/icons/3004dou.gif)
利用外部类创建对象
![](/icons/3004de.gif)
同时创建了内部类
![](/icons/3004de.gif)
对象
![](/icons/3004dou2.gif)
从而可以保证内部类
![](/icons/3004de.gif)
例子绑定在外部类
![](/icons/3004de.gif)
例子上
注意事项 3:成员内部类中成员思路方法和成员变量
![](/icons/3004de.gif)
私有性
作为成员内部类
![](/icons/3004dou.gif)
可以随意引用外部类中
![](/icons/3004de.gif)
成员变量和成员思路方法
![](/icons/3004dou2.gif)
那么在成员内部类中定义
![](/icons/3004de.gif)
成员变量
![](/icons/3004dou.gif)
外部类是否也可以随意访问呢?答案是否定
![](/icons/3004de.gif)
![](/icons/3004dou2.gif)
内部类可以访问它外部类
![](/icons/3004de.gif)
成员
![](/icons/3004dou.gif)
但是内部类
![](/icons/3004de.gif)
成员(如成员变量或者成员思路方法)只有在内部类
![](/icons/3004de.gif)
范围的内是可知
![](/icons/3004de.gif)
![](/icons/3004dou.gif)
不能够被外部类直接引用
![](/icons/3004dou2.gif)
如现在在外部类中定义了
![](/icons/3004yi.gif)
个变量i
![](/icons/3004dou.gif)
在内部类中定义了另
![](/icons/3004yi.gif)
个变量ii
![](/icons/3004dou2.gif)
此时在成员内部类中
![](/icons/3004dou.gif)
可以直接引用这个外部类中
![](/icons/3004de.gif)
变量i
![](/icons/3004dou.gif)
也可以对其直接进行赋值
![](/icons/3004dou.gif)
如i=5等等
![](/icons/3004dou2.gif)
但是在外部类中
![](/icons/3004dou.gif)
则不能够直接引用内部类中
![](/icons/3004de.gif)
成员变量
![](/icons/3004dou2.gif)
如在外部类中
![](/icons/3004dou.gif)
利用ii=5
![](/icons/3004de.gif)
赋值语句改变这个变量
![](/icons/3004de.gif)
值
![](/icons/3004dou.gif)
就属于语法
![](/icons/3004cuowu.gif)
![](/icons/3004dou.gif)
在编译
![](/icons/3004de.gif)
时候就会出现
![](/icons/3004cuowu.gif)
![](/icons/3004dou2.gif)
如果外部类真
![](/icons/3004de.gif)
要引用内部类
![](/icons/3004de.gif)
成员
![](/icons/3004dou.gif)
那也不是不可以
![](/icons/3004dou2.gif)
只是不能够进行直接
![](/icons/3004de.gif)
引用
![](/icons/3004dou.gif)
而是要使用内部类对象引用
![](/icons/3004de.gif)
思路方法才能够
![](/icons/3004diaoyong.gif)
内部类
![](/icons/3004de.gif)
成员变量
![](/icons/3004dou2.gif)
这
![](/icons/3004yi.gif)
点
![](/icons/3004chengxu.gif)
开发人员需要切记
![](/icons/3004dou2.gif)
成员内部类和外部类相互访问彼此
![](/icons/3004de.gif)
成员思路方法限制是区别
![](/icons/3004de.gif)
![](/icons/3004dou2.gif)
特别需要注意
![](/icons/3004de.gif)
是
![](/icons/3004dou.gif)
如果在外部类和非静态思路方法的外例子化内部对象
![](/icons/3004dou.gif)
则需要使用外部类.内部类
![](/icons/3004de.gif)
形式来制定这个对象
![](/icons/3004de.gif)
类型
![](/icons/3004dou2.gif)
这非常
![](/icons/3004de.gif)
麻烦
![](/icons/3004dou2.gif)
为此要尽量避免在外部类和非静态思路方法的外例子化内部类对象
![](/icons/3004dou2.gif)
再者
![](/icons/3004dou.gif)
内部类对象会依赖于外部类对象
![](/icons/3004dou.gif)
除非已经存在
![](/icons/3004yi.gif)
个外部类对象
![](/icons/3004dou.gif)
否则类中不会出现内部类对象
![](/icons/3004dou2.gif)
简单
![](/icons/3004de.gif)
说
![](/icons/3004dou.gif)
内部类对象和外部类对象的间
![](/icons/3004de.gif)
关系非常
![](/icons/3004de.gif)
紧密
![](/icons/3004dou2.gif)
有时候即像
![](/icons/3004yi.gif)
对父子(成员内部类可以随意使用外部类
![](/icons/3004de.gif)
成员)
![](/icons/3004dou.gif)
有时候又像是陌生人(外部类不能够直接使用内部类中
![](/icons/3004de.gif)
成员)
![](/icons/3004dou2.gif)
作为
![](/icons/3004yi.gif)
个出现
![](/icons/3004de.gif)
![](/icons/3004chengxu.gif)
开发人员
![](/icons/3004dou.gif)
必须要深入了解外部类对象和内部类对象
![](/icons/3004de.gif)
关系
![](/icons/3004dou2.gif)
![](/icons/3004yinwei.gif)
在实际工作中
![](/icons/3004dou.gif)
在外部类中定义成员内部类还是很常见
![](/icons/3004de.gif)
![](/icons/3004dou2.gif)
只有了解他们彼此的间
![](/icons/3004de.gif)
关系
![](/icons/3004dou.gif)
在编写应用
![](/icons/3004chengxu.gif)
中
![](/icons/3004dou.gif)
才可以把控好他们
注意实现 4:使用this关键字获取内部类和外部类对象
![](/icons/3004de.gif)
引用
在外部类和成员内部类中
![](/icons/3004dou.gif)
都可以定义变量
![](/icons/3004dou2.gif)
成员内部类可以随意访问外部类中
![](/icons/3004de.gif)
变量
![](/icons/3004dou.gif)
而外部类不能够直接访问内部类中
![](/icons/3004de.gif)
变量
![](/icons/3004dou.gif)
只有通过使用内部类对象来引用内部类
![](/icons/3004de.gif)
成员变量
![](/icons/3004dou2.gif)
不过需要注意
![](/icons/3004de.gif)
是
![](/icons/3004dou.gif)
在外部类中定义
![](/icons/3004de.gif)
变量和内部类中定义
![](/icons/3004de.gif)
变量名字可以相同
![](/icons/3004dou2.gif)
也就是说
![](/icons/3004dou.gif)
在外部类中可以定义
![](/icons/3004yi.gif)
个变量i
![](/icons/3004dou.gif)
在内部类中也可以定义
![](/icons/3004yi.gif)
个变量i
![](/icons/3004dou2.gif)
此时新
![](/icons/3004de.gif)
问题就出来了
![](/icons/3004dou2.gif)
由于在内部类中可以随意访问外部类中成员思路方法和成员变量
![](/icons/3004dou2.gif)
但是此时成员内部类和外部类
![](/icons/3004de.gif)
变量名相同
![](/icons/3004dou.gif)
那么如果要在内部类使用这个变量i
![](/icons/3004dou.gif)
编译器如何知道现在需要
![](/icons/3004diaoyong.gif)
外部类
![](/icons/3004de.gif)
变量i
![](/icons/3004dou.gif)
还是内部类
![](/icons/3004de.gif)
变量i呢?
在实际工作中
![](/icons/3004dou.gif)
应该尽量避免这种情况
![](/icons/3004dou2.gif)
即在定义变量名字
![](/icons/3004de.gif)
时候
![](/icons/3004dou.gif)
内部类中
![](/icons/3004de.gif)
变量名字尽量不要和外部类中
![](/icons/3004de.gif)
变量名字相同
![](/icons/3004dou2.gif)
但是如果真
![](/icons/3004de.gif)
发生这种情况
![](/icons/3004de.gif)
话
![](/icons/3004dou.gif)
Java编译器还是有手段可以解决这个变量名字
![](/icons/3004de.gif)
冲突问题
![](/icons/3004dou2.gif)
如果在类中
![](/icons/3004de.gif)
成员内部类中遇到成员变量名字和外部类中
![](/icons/3004de.gif)
成员变量名字相同
![](/icons/3004dou.gif)
则可以通过使用this关键字来加以区别
![](/icons/3004dou2.gif)
如现在有
![](/icons/3004yi.gif)
个类名字叫做student
![](/icons/3004dou2.gif)
而在这个类中又创建了
![](/icons/3004yi.gif)
个成员内部类
![](/icons/3004dou.gif)
名字叫做age
![](/icons/3004dou2.gif)
现在在这两个类中各自定义了
![](/icons/3004yi.gif)
个成员变量i
![](/icons/3004dou.gif)
用来做循环的用
![](/icons/3004dou2.gif)
此时如果在成员内部类中
![](/icons/3004diaoyong.gif)
这个变量
![](/icons/3004dou.gif)
该如何进行区分呢?通常情况下
![](/icons/3004dou.gif)
如果使用this.i
![](/icons/3004de.gif)
方式来
![](/icons/3004diaoyong.gif)
变量
![](/icons/3004dou.gif)
则表示这个变量是成员内部类中定义
![](/icons/3004de.gif)
变量
![](/icons/3004dou2.gif)
而通过使用student.this.i
![](/icons/3004de.gif)
形式
![](/icons/3004diaoyong.gif)
变量时表示此时引用
![](/icons/3004de.gif)
是外部类
![](/icons/3004de.gif)
成员变量
![](/icons/3004dou2.gif)
也就是说
![](/icons/3004dou.gif)
如果内部类中引用外部类中同名
![](/icons/3004de.gif)
成员
![](/icons/3004dou.gif)
需要通过外部类迷名字.this.外部类成员名字
![](/icons/3004de.gif)
方式加以引用
![](/icons/3004dou2.gif)
而且
![](/icons/3004dou.gif)
在引用成员内部类自己
![](/icons/3004de.gif)
定义
![](/icons/3004de.gif)
成员时也需要使用this关键字
![](/icons/3004dou.gif)
以加以区别
![](/icons/3004dou2.gif)
显然这非常
![](/icons/3004de.gif)
麻烦
![](/icons/3004dou2.gif)
为此笔者仍然要强调
![](/icons/3004yi.gif)
遍
![](/icons/3004dou.gif)
除非有非常特殊
![](/icons/3004de.gif)
必要
![](/icons/3004dou.gif)
否则
![](/icons/3004de.gif)
话要尽量避两外部类和成员内部类中成员变量或者成员思路方法采用相同
![](/icons/3004de.gif)
名字
![](/icons/3004dou2.gif)
否则
![](/icons/3004de.gif)
话
![](/icons/3004dou.gif)
会给后续
![](/icons/3004de.gif)
引用带来很大
![](/icons/3004de.gif)
麻烦
从以上
![](/icons/3004de.gif)
整理总结中可以看出
![](/icons/3004dou.gif)
成员内部类和外部类的间
![](/icons/3004de.gif)
关系确实很复杂
![](/icons/3004dou2.gif)
作为
![](/icons/3004yi.gif)
个Java
![](/icons/3004chengxu.gif)
开发人员
![](/icons/3004dou.gif)
必须要了解内部类和外部类成员相互的间引用
![](/icons/3004de.gif)
准则、内部类对象和外部类对象
![](/icons/3004de.gif)
关系
![](/icons/3004dou2.gif)
在编写代码
![](/icons/3004de.gif)
时候
![](/icons/3004dou.gif)
尽量避免内部类和外部类中成员变量和成员思路方法
![](/icons/3004de.gif)
命名冲突
![](/icons/3004dou2.gif)
如果真
![](/icons/3004de.gif)
发生重名
![](/icons/3004de.gif)
话
![](/icons/3004dou.gif)
要学会利用this关键字来消除这个冲突
![](/icons/3004dou2.gif)
笔者上面谈
![](/icons/3004de.gif)
![](/icons/3004yi.gif)
些注意实现也是
![](/icons/3004yi.gif)
些比较抽象
![](/icons/3004de.gif)
内容
![](/icons/3004dou.gif)
需要开发人员在实际工作中去领悟
延伸阅读
最新评论