我可以限制另一个类可以在Java中调用的方法吗?

假设我有类ABC ,其中类C具有可读写属性:

 public class C { private int i = 0; // Writable. public void increment() { i++; } // Readable. public int getScore() { return i; } } 

是否可以只让A使用increment()方法,只让B使用getScore()方法?

不,不可能分配每类访问权限。

考虑将您的类分成单独的接口,以便每个类只获得一个具有所需接口的对象。 例如:

 interface Incrementable { public void increment(); } interface HasScore { public int getScore(); } class C implements Incrementable, HasScore { /* ... */ } class A { public A(Incrementable incr) { /* ... */ } } class B { public B(HasScore hs) { /* ... */ } } 

当然,有安全隐患,但这应该让你思考正确的方向。

是的,但是你必须经历一些旋转。

 public interface Incrementable { public void increment(); } public interface Readable { public int getScore(); } public class C implements Incrementable, Readable { ... } 

现在,当您在A中定义接收对B实例的引用的方法时,请定义该方法以获取Incrementable 。 对于B ,将其定义为Readable

Java有4个范围:private,protected,public和“package”。 可以从任何地方访问公开的内容。 仅受子类保护。 私人只是那个阶级。 “package”范围未命名,但如果省略其他三个范围,则假定包范围。 这只能由同一个包中的其他类访问。

HTH。

不,不可能这样做。

不是你想要的,但你可以上去堆栈跟踪(创建一个exception)并检查调用你的increment方法的类。

虽然直接的答案是否定的,但另一种解决方法(一个丑陋的方法)可能是创建扩展第三个的两个接口(或者你可以只使用一个Object作为参数):Reader和Writer,将调用类作为参数传递给每个函数:

 public interface Caller; public interface Reader extends Caller; public interface Writer extends Caller; public void increment(Caller c) { if (c instanceof Writer) { i++; } }