Java中Friend概念的实现

如何用Java(如C ++)实现朋友概念?

回答:

Java没有C++中的friend关键字。但是,有一种方法可以模拟这种情况。实际上可以提供更精确控制的方法。假设您具有类A和B。B需要访问A中的某些私有方法或字段。

public class A {

private int privateInt = 31415;

public class SomePrivateMethods {

public int getSomethingPrivate() { return privateInt; }

private SomePrivateMethods() { } // no public constructor

}

public void giveKeyTo(B other) {

other.receiveKey(new SomePrivateMethods());

}

}

public class B {

private A.SomePrivateMethods key;

public void receiveKey(A.SomePrivateMethods key) {

this.key = key;

}

public void usageExample() {

A anA = new A();

// int foo = anA.privateInt; // doesn't work, not accessible

anA.giveKeyTo(this);

int fii = key.getSomethingPrivate();

System.out.println(fii);

}

}

usageExample()显示了它是如何工作的。B的实例无权访问A实例的私有字段或方法。但是,通过调用GiveKeyTo(),类B可以获得访问权限。没有其他类可以访问该方法,因为它需要一个有效的B作为参数。构造函数是私有的。

然后,类B可以使用密钥中传递给它的任何方法。尽管设置起来比C ++老友记关键字要笨拙,但要细得多。类A可以选择要公开给哪些类的确切方法。

现在,在上述情况下,A授予对B的所有实例和B的子类实例的访问权限。如果不需要后者,则GiveKeyTo()方法可以使用getClass()在内部检查其他类型的确切类型,并抛出如果不是B,则为例外。

以上是 Java中Friend概念的实现 的全部内容, 来源链接: utcz.com/qa/399369.html

回到顶部