java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里
java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里面好几个类),我想实现ac访问b,c访问d,但a不能访问d,...
java中访问权限的控制。java默认的是包访问权限,但是对于有些情况如何处理呢。例如有四组类abcd(每组里面好几个类),我想实现ac访问b,c访问d,但a不能访问d,如何实现呢?
展开
2个回答
展开全部
如果不考虑其他的类的话,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,使得类间的关系变得有点复杂,但是用好了还是可以最大程度降低其缺点。
上面这种结果是你要的吗?还有什么特别的要求吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询