探讨Java内部类的可见性
作者:网络转载 发布时间:[ 2013/4/24 9:59:07 ] 推荐标签:
但由于所有的内部类都实现了接口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){
//create an outer object
Out out=new Out();
//create a public inner object by 'new'
Out.PublicIn publicIn=out.new PublicIn();
publicIn.public_arg=0;
publicIn.public_method();
// create a public inner object by 'out's method'
Out.PublicIn publicIn2 = out.getPublicIn();
publicIn2.public_arg=0;
publicIn2.public_method();
//use Interface reference
InMethod method;
method=out.getPrivateIn();
method.public_method();
method=out.getDefaultIn();
method.public_method();
method=out.getProtectedIn();
method.public_method();
method=out.getPublicIn();
method.public_method();
}
}
通过new方式和getInnerInstance()方法只能访问public内部类的public成员和public方法;如果使用接口的引用,则可以访问所有4个内部类的public方法。

sales@spasvo.com