这是一个例子:
class A
{
List l = new List ();
list.insert("x");
}
class List
{
...
public void insert ()
{
/*insertion occurs*/
}
...
}
Run Code Online (Sandbox Code Playgroud)
是否有可能将insert()方法保持为public,但是只限制对A类的访问,以便只有从A调用时才能访问其他类?
如果该方法是公开的,则每个人都可以访问它.像你这样访问控制的技巧是通过接口公开一组公共操作,将辅助操作添加到实现接口的私有类,并使用户编程到接口,而不是类.
这是一个例子:
public interface MyList {
Object elementAt(int i);
}
public class A {
private static class MyListImpl implements MyList {
public Object elementAt(int i) {
...
}
public void insert(Object element) {
...
}
}
private final MyListImpl list = new MyListImpl();
public MyList getList() { return list; }
public void insert(Object o) { list.insert(o); }
}
Run Code Online (Sandbox Code Playgroud)
使用场景:
A a = new A();
a.insert(123);
a.insert("quick brown fox");
MyList lst = a.getList();
System.out.println(lst.elementAt(0));
System.out.println(lst.elementAt(1));
Run Code Online (Sandbox Code Playgroud)
我可以将调用方法的对象作为参数传递,即
list.insert("x", this);
Run Code Online (Sandbox Code Playgroud)
然后检查传递的对象是否是A类的实例
public void insert (String x, Object o)
{
if(o instanceof ClassA){
/*insertion occurs*/
}
}
Run Code Online (Sandbox Code Playgroud)