栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中Friend概念的实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中Friend概念的实现

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,则为例外。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号