不同的方法访问不同的类

时间:2014-11-18 09:40:28

标签: java

以下是代码结构: 我希望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[]){

    }
}

1 个答案:

答案 0 :(得分:1)

使用标准Java访问修饰符无法实现所描述的内容。

如果C可以看到A.m1而不是A.m2,那么我们就知道A.m2不能公开,A.m1不能是私有的。由于D看到的是A.m2而不是A.m1,我们知道它们既不公开也不隐私。

因此,他们必须受到保护或包私有(默认)访问。由于我们知道我们想要对这些方法进行不同的访问,因此每个方法都必须具有不同的修饰符。因此,一个是protected,另一个是包私有。

但是,我们希望CD能够访问其中一个而不是另一个。无论我们如何安排这些其他类,protected始终是package-private的严格超集,因为它允许访问包子类中的所有内容。我们无法安排CD,因此它可以访问包私有方法,但查看protected方法。


事实上,从更一般的意义上讲,访问修饰符构成了一个层次结构。如果你可以“看到”其中一个修饰符,那么你也可以看到它上面的所有修饰符。因此,显然不可能在C看到m1而不是m2,而D看到m2而不是m1时具有互斥条件。