首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

研讨Java内部类的可见性

2012-08-29 
探讨Java内部类的可见性转载自http://zhangjunhd.blog.51cto.com/113473/65624/在Java中,当生成一个内部类

探讨Java内部类的可见性
转载自http://zhangjunhd.blog.51cto.com/113473/65624/
在Java中,当生成一个内部类的对象时,此对象与制造它的外部类通过外部类的.this保持着联系,因此该内部类对象可以访问其外部类对象的所有成员,包括private成员。

而该内部类对象对于其他类的对象的访问,遵照常规的访问权限语法,这一点也没有什么特别支持。这里需要探讨的是,外部类以及其他类的对象可以如何访问到某个内部类对象,即内部类的可见性问题。

下面是一个示例程序Out.java,其中包含了4个不同访问权限的内部类(private,default,protected,public),在每个内部类中,分别包含4个不同访问权限的成员与方法。在外部类Out中提供了得到内部类实例的方法。

package com.zj.other;import com.zj.main.Out;public class DifferPackageAndExtend extends Out{    public static void main(String[] args){       //create an DifferPackageAndExtend's object,which extends Out       Out extend=new DifferPackageAndExtend();       //create a protected inner object by 'new'       //Out.ProtectedIn protectedIn=extend.new ProtectedIn();       //->error:The constructor Out.ProtectedIn() is not visible       // create a protected inner object by 'out's method'       Out.ProtectedIn protectedIn=extend.getProtectedIn();       protectedIn.public_arg=0;       protectedIn.public_method();    }}

通过new方式,虽然可以得到内部类的句柄Out.ProtectedIn,但该内部类的构造子却不可见。

通过getInnerInstance()方法得到protected内部类的对象,但只能访问到public成员和public方法。由此可知,protected内部类并不关心是否有其他类继承自它的外部类。所有protected访问权限不在此种情况下适用。

热点排行