java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里

java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里面好几个类),我想实现ac访问b,c访问d,但a不能访问d,... java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里面好几个类),我想实现ac访问b,c访问d,但a不能访问d,如何实现呢? 展开
 我来答
JINLegend
2013-08-29 · TA获得超过802个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:125万
展开全部

如果不考虑其他的类的话,c访问d,a不能访问d,那么把d相关权限设为default,a,c处在不同包里,c、d在同一个包里。a,c都访问b,那么就让b的权限设为公开。

但这可能导致包之间管理的混乱。

如果一定要跨包访问,但又不愿设立public的访问权限,那么单靠JAVA语言的访问控制很难做到,则可以稍微提升一下耦合度,并借助多态来实现。

比方说,a、b是两个不同的包,要让a能访问b的default的东西,那么可以如下:


a设立一个接口:

public interface IA
{
    void F();
}

某个要使用b的函数

public class A1
{
    ……
    private IA a;
    ……
    public void G(IA a)
    {
        ……
        this.a=a;//这样就可以在别的方法里用
        a.F();//多态,a根本不知道b里有什么类也能访问相应的方法。
        ……
    }
}

以上是a里的,下面是b里的:

如果是整个类都是default的

class B1 implements IA
{
    public void F() {……}
    public B1()
    {
        new A1().G(this);//这样就把自己传给了a,a不用知道自己是什么东东也能使用F方法。
    }
}

如果是类的部分方法为default的

public class B2
{
    ……
    void FF();//想让这个方法被a调用。
    private class B22 implements IA//把B22的实例传给a
    {
        public void F() 
        {
            FF();//这就等于让a调用FF方法了。
        }
    }
}

上面这种方法缺点不少,得由b亲自把自己的实例传给a,使得类间的关系变得有点复杂,但是用好了还是可以最大程度降低其缺点。

上面这种结果是你要的吗?还有什么特别的要求吗?

yugi111
2013-08-29 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
Public:    不同包、同一包、类内都可用  
Private:  类内 
Protected: 不同包的子类、同一包、类内都可用 
不写时:    同一包、类内

你对照下撒

a extends b
c extends b

c 里面可以有 private class d撒
a里面就访问不到了撒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式