Java中

时间:2016-04-03 00:35:06

标签: java

我这样做是为了教育目的,所以想象我有一个叫做A,B和C的对象,如果B在A上调用一个方法,A会做,如果C在A上调用一个方法,A赢了'做到了。

An analouges,成像A是你,B是你爸爸,C是别人,如果你爸爸告诉你什么,你必须不问,如果别人告诉你什么,你没有义务这样做它

我没有找到这种行为的答案,请有人可以描述如何做,并向我展示Java中的一个例子。

2 个答案:

答案 0 :(得分:0)

如果你在构造函数中包含了一个bosses列表,那么这段代码就是这样做的一种方法:

public class Me {
    private ArrayList<Object> bosses=new ArrayList<Object>();

    public Me(ArrayList<Object> myBosses) {
        this.bosses=myBosses;
    }
    public void AnOrderToDo(Object orderer,int randomArg){
        for(Object o:bosses){
            if(o==orderer){
                //TODO method code here
            }
        }   
    }
}

答案 1 :(得分:0)

您可以创建仅包含类A和B的包,并对不应从其他类调用的方法使用默认访问修饰符。

默认访问修饰符只允许类本身和其他包中的类查看方法,因此如果C在另一个包中,则甚至无法看到该方法。

示例:

包stackoverflow.defaultModifier中的A类

package stackoverflow.defaultModifier;
public class A {
//NOTICE THE ABSENCE OF PUBLIC/PRIVATE/PROTECTED, is using the default access modifier
    void printHello(){
        System.out.println("hello");
    }
}

包stackoverflow.defaultModifier中的B类可以访问printHello()

package stackoverflow.defaultModifier;
public class B {
    public static void main(String[] args) {
        A a = new A();
        a.printHello();
    }
}

stackoverflow.externalClasses 中的C类无法访问printHello()(错误:printHello()在A类中不公开,无法从外部包访问)

package stackoverflow.externalClasses;
import stackoverflow.defaultModifier.A;
public class C {
        public static void main(String[] args) {
        A a = new A();
        a.printHell(); //compilation error!
    }
}

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html