我这样做是为了教育目的,所以想象我有一个叫做A,B和C的对象,如果B在A上调用一个方法,A会做,如果C在A上调用一个方法,A赢了'做到了。
An analouges,成像A是你,B是你爸爸,C是别人,如果你爸爸告诉你什么,你必须不问,如果别人告诉你什么,你没有义务这样做它
我没有找到这种行为的答案,请有人可以描述如何做,并向我展示Java中的一个例子。
答案 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