快速业务通道

探讨Java内部类的可见性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
类的实例。

方式一 OuterClassName.InnerClassName inner=new Ouer().new Inner();

通过外部类对象.new 的方式,可以得到private inner class 的实例,并且可以访问它的private成员和private方法。自然default、protected和public的都可以访问。

方式二 通过外部类方法get InnerInstance()

此种方法也可以访问所有内部类的所有成员和方法。

所以,一个内部类的对象对生成它的外部类对象是完全可见的,包括private内部类、private成员与private方法。

2.同包其他类的访问

下面,在同一个包内创建一个SamePackage.java类,试图访问Out类的所有内部类。

SamePackage.java

package com.zj.main; public class SamePackage {    public static void main(String[] args) {     // create an outer object     Out out = new Out();     //create a private inner object by ''new''     //Out.PrivateIn privateIn=out.new PrivateIn();     //->error: Out.PrivateIn is not visible.     // create a default inner object by ''new''     Out.DefaultIn defaultIn = out.new DefaultIn();     //defaultIn.private_arg=0;->error:not visible     defaultIn.default_arg = 0;     //defaultIn.private_method();->error:not visible     defaultIn.default_method();     // create a private inner object by ''out''s method''     //Out.PrivateIn privateIn2 = out.getPrivateIn();     //->error:Out.PrivateIn is not visible through out.getPrivateIn() is visible.     // create a private inner object by ''out''s method'',     // but use Interface reference to handle it     InMethod privateIn=out.getPrivateIn();     privateIn.public_method();    } }

探讨Java内部类的可见性(3)

时间:2011-02-12 zhangjunhd

方式一 OuterClassName.InnerClassName inner=new Ouer().new Inner();

使用方式一试图得到private 内部类失败,根本得不到内部类的句柄。

//create a private inner object by ''new'' //Out.PrivateIn privateIn=out.new PrivateIn(); //->error: Out.PrivateIn is not visible.

但是可以正常的访问default访问权限的内部类的对象。当然是访问不到它的private成员和private方法的。自然protected和public的都可以访问。

方式二 通过外部类方法get InnerInstance()

虽然可以调用外部类对象的getInnerInstance()方法,但由于得不到private内部类的句柄,所以此种方法无法创建private内部类的实例。

// create a private inner object by ''out''s method'' //Out.PrivateIn privateIn2 = out.getPrivateIn(); //->error:Out.PrivateIn is not visible through out.getPrivateIn() is visible.

但由于所有的内部类都实现了接口InMethod。

<<interface>> InMethod.java public interface InMethod {    void public_method(); }

所以还是可以通过接口的引用访问到private内部类的public方法。自然default、protected和public的都可以访问这个public方法。

// create a private inner object by ''out''s method'', // but use Interface reference to handle it InMethod privateIn=out.getPrivateIn(); privateIn.public_method();

3.不同包其他类的访问

在另一个包中建立一个类DifferPackage.java。

DifferPackage.java

package com.zj.other; import com.zj.main.InMethod; import com.zj.main.Out; public class DifferPackage {    public static void main(String[] args){

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号