以下是代码结构: 我希望C类只能访问A类和A类的M1() B类的M3(),其他方法如M2()&这里不应该看到M4()。 和D类访问A类和B类的M2() B类的M4(),其他方法如M1()&这里不应该看到M3()。
允许使用代码包,访问级别修改。只是想实现上述目标。
public class A{
<access_specifier> void M1()
{
}
<access_specifier> void M2()
{
}
}
public class B{
<access_specifier> void M3()
{
}
<access_specifier> void M4()
{
}
}
public class C{
public static void main(String args[]){
}
}
public class D{
public static void main(String args[]){
}
}
答案 0 :(得分:1)
使用标准Java访问修饰符无法实现所描述的内容。
如果C
可以看到A.m1
而不是A.m2
,那么我们就知道A.m2
不能公开,A.m1
不能是私有的。由于D
看到的是A.m2
而不是A.m1
,我们知道它们既不公开也不隐私。
因此,他们必须受到保护或包私有(默认)访问。由于我们知道我们想要对这些方法进行不同的访问,因此每个方法都必须具有不同的修饰符。因此,一个是protected
,另一个是包私有。
但是,我们希望C
和D
能够访问其中一个而不是另一个。无论我们如何安排这些其他类,protected
始终是package-private的严格超集,因为它允许访问包和子类中的所有内容。我们无法安排C
或D
,因此它可以访问包私有方法,但不查看protected
方法。
事实上,从更一般的意义上讲,访问修饰符构成了一个层次结构。如果你可以“看到”其中一个修饰符,那么你也可以看到它上面的所有修饰符。因此,显然不可能在C
看到m1
而不是m2
,而D
看到m2
而不是m1
时具有互斥条件。