小编典典

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

2020-11-13

java项目friends_Java中Friend概念的实现相关推荐

  1. cmd编译整个java项目_cmd中使用javac对整个包编译怎么办?对包里面的某几个java文件编译怎么办?...

    展开全部 JAVAC 命令62616964757a686964616fe59b9ee7ad9431333335306262详解 结构 javac [ options ] [ sourcefiles ] ...

  2. Java基础学习总结(167)——Java项目实践中如何实现幂等

    什么是幂等性? 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同. 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行 ...

  3. Oracle数据库学习笔记(二十八)--在Java项目开发中使用ojdbc连接Oracle数据库

    选择正确的 Jar 包 Oracle 10g 选择使用 ojdbc14.jar Oracle 11g 选择使用 ojdbc6.jar 将 Jar 包安装到本地 Maven 仓库中 具体方法参考我之前发 ...

  4. Java项目开发中的DO、BO、DTO、VO、PO的区别

    VO view object:视图对象,用于展示层,把某个指定页面的展示数据封装起来 DTO Data Transfer Object:用于展示层与服务层之间的数据传输对象 BO Business O ...

  5. 如何真正的吃透一个Java项目?

    如何真正的吃透一个Java项目?这里要说吃透一个Java项目的标准就是:下次遇到此类Java项目可以快速使用写过的Java项目的解决方案完成它. 要达到这个的标准,还得从开发一个Java项目的过程来分 ...

  6. 如何学习Java? 在学习Java的过程中需要掌握哪些技能?

    作为刚刚进入Java领域的新同学,无论是高校的毕业大学生,还是有志转行的在职人员,都面临着诸多如下的困惑:如何学习Java? 在学习Java的过程中需要掌握哪些技能?Java学习过程中有哪些注意事项? ...

  7. Java项目框架搭建系列(Java学习路线)-博客提纲 (转自一位技术大佬)

    前言: 已经毕业两年,真是时间飞逝. 其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了. 你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务 ...

  8. 如何用eclise创建java项目到创建包到创建类?

    Eclise创建java项目到创建包到创建类流程 第一步: ① 打开eclise ② 点击New ③ 点击Project... 第二步: ① 选中Java Project ② 点击Next 进行下一步 ...

  9. Java项目运行,解决“java.sgl.SQLSyntaxErrorEx: Unknown column ‘user0_.qrcode‘ in ‘field list!” 问题

    在Java项目开发过程中,很多时候为了方便,我们会在实体类中新建一个属性,但数据表中并没有对应的字段:这种情况下,运行项目很有可能会遇到这样的报错信息: 解决办法有两种,分情况处理: 方法一,项目使用 ...

最新文章

  1. 还在用肉眼找不同吗?这个技术轻松搞定
  2. 设计模式(3)-装扮你的类(装饰模式)
  3. 【实战演练】两种方法让 Docker 帮您快速构建应用程序
  4. FAQ宝典之常见问题排查与修复方法
  5. 数据结构——树与二叉树
  6. java 堆转储快照_Java堆转储:您可以完成任务吗?
  7. Linux使用RSA实现免密登录(原理)
  8. 127.0.0.1与localhost的区别
  9. 【Python】圆周率的计算
  10. es6 Class 的 name 属性
  11. 惊喜不止小米9!小米又一4800万新机确认:不给友商机会?
  12. C++ 输入和输出IO
  13. XNA:2D图元与3D模型共存时的渲染问题
  14. 【Dart语言第6篇】Dart类
  15. 全裸或半裸的大肚照国际接轨 细数女星大尺度斗艳孕照
  16. C: warning: too many arguments for format [-Wformat-extra-args]
  17. 【冬镜网】什么是搜索引擎优化?
  18. linux系统下部署python自动化程序并配置Jenkins定时执行
  19. 一文助你入门HTML(❤ ω ❤)
  20. 自动驾驶汽车的库尔雪维尔测试是不可能的挑战

热门文章

  1. 峰回路转,幽辉半床——新说莺莺传之四
  2. c语言教改课题开题报告,教改项目结题及新项目开题报告会简讯
  3. js 监听浏览器窗口大小变化
  4. 手动挡五个档位示意图_手动挡车档位介绍,手动挡挡位示意图
  5. 红米Note 4X详细刷成开发版开启ROOT超级权限的教程
  6. 二叉排序树的特点以及实现代码
  7. 【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体
  8. 服务器内存和常见内存的不同点在哪
  9. 内存导致的电脑游戏中显示hdmi无信号 从而死机的情况
  10. 伊登软件BPM/EIP解决方案