Java 不同的方法访问不同的类

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() { } }

以下是代码结构: 我希望类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 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(),…
。您知道哪些访问说明符?好吧,既然您都知道,那么您应该考虑一下它们之间的区别,以及哪些明显有用或无用