在设计程序时,为达到一个复杂的目的,需要设计多个类,有时会遇到一个类和另一个类共同合作、互相调用对方的方法这种情况。我们想让类的某些方法只是为指定的类准备,而不允许其他类访问,该如何解决呢?

通常按照我们一般的面向对象的思维,学过c++面向对象的,我们会想到用友联函数,通过修饰类成员方法为友联,来直接达到目的:指定另一个类有权限能够访问这个方法。但对于其他类来说,这个方法是隐藏、不可视、不可访问的,即没有权限。

这在c++里是没有问题的。

那么java里有没有友联这个概念呢?

答案是有的,确实为这种问题设计有解决方法。

不过在java中,友联的概念的实现,不是靠c++的声明友联函数的路子实现,而是另一种不同的路子:

我们可以回忆下最初我们学习的四大java权限访问修饰符,有哪些呢?按照开放程度高低依次为:public default protected private

这四个中,有哪些是跨类权限(跨类权限即允许类外的其他类访问)呢?

有两个,一个是public,一个是default 。这两个权限中,如果我们把类修饰成public,那么任何类都可以访问了,而我们的目的是让修饰的方法只有指定类可以访问。那么看default,default权限的定义是,只允许同包下的类访问。这个特性就可以满足我们这个问题的需求,只要我们把方法修饰成default(不加任何修饰符就是default),然后把需要指定类才能访问它的类给放到同包目录下,就可以实现对这些类可视、可访问,而对外(对包外的类)隐藏。

剩下两个修饰符,protected是只允许自己类和子类的权限;private是只允许自己类的权限。

这两个修饰符都是局限在类内部的,无法使得与类外的其他类联系。

很多新手程序员刚学习java,很少用default这个修饰符,基本就是private+public两个修饰符写不停,可以说它是用的最少的一个修饰符了,这里想说的是,在以后开始遇到这种情况起,就要恰当地采用default修饰符了。

技术总结:在Java中面向对象设计中,要想实现友联,依赖权限修饰符default,利用同包可访问的特性,来实现成员友联。

抽象概念的简单实体化理解

一个公司(包)里,员工之间是有信任关系的(虽然现实中信任程度有限),他们需要共同协作完成任务,所以他们的有些资源可以在团队内部共享,有些人的方法可以被团队内部的其他人调用。这些属于团队内部资源,而这些资源对外其他人保密、不授权。

因此在设计类时,如果出现了多个类存在依存关系,它们互相不可或缺,需要共同协作完成任务时,可以视为它们是一体的团队,把他们放在一个包下(为这些人开了个公司~),并将团队内部资源修饰为default,就可以实现团队内部工作和对外工作两不误的兼容美象。

这告诉了我们,解决问题除了每个人都靠个人外,还要学会团队合作~

还告诉我们,同处于一屋檐下的人,基本上算是朋友了吧(友联),你们之间是可以合作的,因为你们都有共同之处才处在同一个层次里。

Java没有友联(函数)这个概念怎么办?相关推荐

  1. java内联函数_Java之内联函数_内联函数的优缺点

    描述 内联函数 1.内联函数就是指函数在被调用的地方直接展开,编译器在调用时不用像一般函数那样,参数压栈,返回时参数出栈以及资源释放等,这样提高了程序执行速度. 2.Java语言中有一个关键字fina ...

  2. C++内联函数(inline function)

    c++从c中继承的一个重要特征就是效率.假如c++的效率明显低于c的效率,那么就会有很大的一批程序员不去使用c++了. 在c中我们经常把一些短并且执行频繁的计算写成宏,而不是函数,这样做的理由是为了执 ...

  3. 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr

    文章目录 一:内联函数 (1)宏函数的缺陷 (2)内联函数的概念 (3)内联函数的特性 二:auto关键字(C++11) (1)auto简介 (2)auto使用注意事项 三:基于范围的for循环(C+ ...

  4. [C++] 内联函数inline 以及 auto关键字 -- C++入门(4)

    本篇文章主要包括内联函数和auto关键字.其中,内敛函数包括概念,特性等:auto关键字的使用规则,使用场景等. 目录 1.内敛函数 1.1问题引入: 1.2内联函数的概念 1.3内敛函数的特性 2. ...

  5. C++入门 “引用”,“内联函数” 详解

    目录 一.引用 1.引用的概念: 2.引用的格式: 3.引用的特性 4.取别名原则: 难点:隐式类型转换的引用 5.引用的使用场景: [1]做参数: [2]做返回值 (1)int& Count ...

  6. 内联函数(inline)详解

    为什么要有内联函数 在学习内联函数之前,大家可以写一个实现加法的宏ADD(),检测一下自己. 如果对宏等预编译知识不太熟悉的话,可以先看一下这篇文章:预编译--2.2.4 以下是一个正确的ADD宏: ...

  7. 内联函数(inline 函数)详解

    inline 函数详解 定义 内联函数和普通函数一样,区别仅仅是在被调用处直接使用机器码替换的形式. 直接采用机器码替换的目的是:减少因调用而造成的开销,加速执行效率. 很多编程语言包括:c,c++, ...

  8. java调用kotlin的内联函数_Kotlin内联函数

    上一章学了下高阶函数,我们可以用Lambda表达式很好的使用高阶函数,现在来看看高阶函数的原理,要知道Kotlin文件最终都是被编译成Java字节码的,但是Java中并没有高阶函数这个概念,其实Kot ...

  9. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...

最新文章

  1. tomcat重启后session没有清除的解决办法
  2. 【产品]如何建立交互设计自查表
  3. table control的修改/排序/删除功能实现实例
  4. LOJ - #117. 有源汇有上下界最小流(有源汇有上下界的最小流)
  5. 某些小时后MySql连接自动掉线
  6. memcached和php关系,php – memcacheD这没关系?
  7. ln创建、删除软/硬链接
  8. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...
  9. 评论家:亚马逊先于苹果达万亿美元市值
  10. UVA785 LA5281 Grid Colouring【DFS】
  11. 穿上马甲就没认出polya定理之典型题目手环
  12. 问题三十二:怎么用ray tracing画多边形(polygon, triangle)
  13. C# int byte数组互转 int byte[]互转
  14. iOS 获取手机 唯一标识
  15. UML培训取得姣好成绩,受到客户好评
  16. java newline_Java BufferedWriter newLine()方法
  17. 如何对CAD图纸上的图形进行单独保存起来
  18. java hashmap api_JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
  19. 底层软硬件及物联网传感技术决定数字人系统“进化”水平
  20. jenkins流水线(jenkinsfile)详解,保姆式教程

热门文章

  1. 干货课堂丨分享一种LCD驱动电路方案【飞凌嵌入式】
  2. 狭义相对论从入门到入土(建议初一及以上)
  3. 科研论文中的图片如何保证高清
  4. 如何将视频中的音频提取出来
  5. ElastSearch整合SpringBoot模仿京东商城实现关键字高亮显示
  6. 年度榜单!我整理了2020年优质的Python文章和资源。
  7. 爬虫实例5:使用scrapy框架获取链家网二手房最新信息(获取单个城市所有街区二手房信息可以使用selenium动态获取页数)
  8. 江城如画里,山晚望晴空。 两水夹明镜,双桥落彩虹。 人烟寒橘柚,秋色老梧桐。谁念北楼上,临风怀谢公
  9. 74HC138芯片简析
  10. 我们为什么需要仿真服务机器人?