Java 不同的方法访问不同的类
以下是代码结构: 我希望类C只访问类A的M1()和类B的M3(),其他方法如M2()和M4()在这里不可见。 和类D来访问类A的M2()和类B的M4(),其他方法如M1()和M3()应该在这里不可见 允许对代码包、访问级别进行修改。只是想实现以上的目标Java 不同的方法访问不同的类,java,Java,以下是代码结构: 我希望类C只访问类A的M1()和类B的M3(),其他方法如M2()和M4()在这里不可见。 和类D来访问类A的M2()和类B的M4(),其他方法如M1()和M3()应该在这里不可见 允许对代码包、访问级别进行修改。只是想实现以上的目标 public class A{ <access_specifier> void M1() { } <access_specifier> void M2() { } }
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[]){
}
}
公共A类{
void M1()
{
}
空位M2()
{
}
}
公共B级{
空隙M3()
{
}
无效M4()
{
}
}
公共C类{
公共静态void main(字符串参数[]){
}
}
D类公共服务{
公共静态void main(字符串参数[]){
}
}
使用标准Java访问修饰符无法实现您所描述的内容
如果C
可以看到A.m1
但不能看到A.m2
,那么我们知道A.m2
不能是公共的,A.m1
不能是私有的。因为D
看到的是A.m2
而不是A.m1
,我们知道它们既不能是公共的也不能是私有的
因此,必须对它们进行保护或包私有(默认)访问。因为我们知道我们希望对这些方法有不同的访问,所以每个方法都必须有不同的修改器。因此,一个是受保护的,另一个是包私有的
但是,我们希望C
和D
都能够访问其中一个,而不能访问另一个。无论我们如何安排这些其他类,protected
始终是包私有的严格超集,因为它允许访问包和子类中的所有内容。我们无法安排C
或D
,以便它可以访问包私有方法,但看不到受保护的方法
事实上,在更一般的意义上,访问修饰符形成了一个层次结构。如果可以“看到”其中一个修改器,那么也可以看到它上面的所有修改器。因此,显然不可能存在互斥条件,C
看到的是m1
而不是m2
,D
看到的是m2
而不是m1
,您想用这个要求实现什么?也许另一种方法会更好,比如关于可见性的家庭作业。是这样吗?同样,在Java中,方法以小写字母开头是一个很强的惯例,因此它应该是m1(),m2(),…
,而不是m1(),m2(),…
。您知道哪些访问说明符?好吧,既然您都知道,那么您应该考虑一下它们之间的区别,以及哪些明显有用或无用