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