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

2022-09-02 11:53:14

假设我有类 , ,以及其中类具有可读和可写属性:ABCC

public class C {
    private int i = 0;

    // Writable.
    public void increment() { i++; }

    // Readable.
    public int getScore() { return i; }
}

是否可以只让使用方法而只让使用方法?Aincrement()BgetScore()


答案 1

不可以,无法分配每个类的访问权限。

请考虑将类分离到单独的接口中,以便每个类仅获取具有所需接口的对象。例如:

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) { /* ... */ }
}

当然,存在安全隐患,但这应该会让你朝着正确的方向思考。


答案 2

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

public interface Incrementable {
    public void increment();
}

public interface Readable {
    public int getScore();
}

public class C implements Incrementable, Readable
{
    ...
}

现在,当您在 A 中定义接收对实例的引用的方法时,请定义该方法以改为采用 。对于 ,将其定义为采用 .BIncrementableBReadable