社区
Java SE
帖子详情
java怎么没有友元类?
youqika
2009-04-13 10:47:14
假设所有的类在同一包当中,有两个public的类A和B(假设B的所用属性及方法都是静态的),假设A中有一个方法setX()只想被B调用,而不能被其他类使用,
如果不用反射的话,应该怎么做?
...全文
1202
8
打赏
收藏
java怎么没有友元类?
假设所有的类在同一包当中,有两个public的类A和B(假设B的所用属性及方法都是静态的),假设A中有一个方法setX()只想被B调用,而不能被其他类使用, 如果不用反射的话,应该怎么做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangkaixin1226
2009-04-13
打赏
举报
回复
学习,顶
yang677888
2009-04-13
打赏
举报
回复
VC++有友元类
Java没有友元类,Java只提供包内友好访问--访问无任何访问限定符修饰的元素
Java 引入了包的概念, 包内访问默认为友好访问, 这样可以使程序的逻辑结构
更清晰,如果逻辑上一堆class可以互相友好访问,那么应该将这堆 class 打包这
样只有包内可以友好访问,包外无法访问(包外的继承者也无法访问)
knightzhuwei
2009-04-13
打赏
举报
回复
因为java把多继承 友元之类的特性淘汰了
JarodYv
2009-04-13
打赏
举报
回复
[Quote=引用 2 楼 youqika 的回复:]
难道要把B做成A的内部类?
真别扭
[/Quote]
诚然,这样确实有点别扭。
这样做导致了一个严重的后果就是原始类和友元之间变成了一种组合(composition)关系,而不是c++里面的一种相识(acquaintance)关系,即友元的生命周期完全被原始类给负责了!
但是确实没有其他好的方式来实现了。当然内部类也有他自己的优点,能够解决很多友元的局限。
JarodYv
2009-04-13
打赏
举报
回复
首先友元不是一个好的设计,它破坏了封装。并且自身有很多局限:比如友元关系不能被继承;友元关系是单向的,不具有交换性;友元关系不具有传递性。
Java采用内部类实现C++友元的功能。事实上内部类就是一种面向对象的闭包,因为内部类有他的宿主类的一个reference(所谓闭包是指一个对象,它记录了来自于创建它的作用域的所有信息),内部类本身可以利用这个引用访问宿主类的一切变量,包括Private级别。这不就是一个语法上的,一个类的所有成员变量能被另一个类完全访问吗?内部类不正是能当做宿主类的友元吗?
Java中的Memento模式里Memento的变量只有Originator(原发器)能够访问,这在c++中很容易实现,因为c++有友元的概念。只要将Memento的成员变量设置成私有访问权限,再把Originator设置成Memento的友元即可。Java的实现方法是将Originator类作为Memento的内部类使用!而Memento只有一个public的方法getCallbackRefenence,用这个方法得到Originator的refenence。
youqika
2009-04-13
打赏
举报
回复
难道要把B做成A的内部类?
真别扭
yxc0433
2009-04-13
打赏
举报
回复
可以参见:http://topic.csdn.net/t/20031111/11/2448764.html
另,友元破坏了oo的思想。不是一个好的设计。。
x360995630
2009-04-13
打赏
举报
回复
C++中有友元 java中没有
NDK14_C++基础:友元,模板方法,模板类,类型转换
一 友元 类似
java
中享元模式:实例的共享(ImageLoader Lru 算法 存储图片) 友元:类或函数的共享 优点:提高效率、表达清晰 缺点:破坏封装性 特征: 友元函数不能被派生类继承 友元函数不能使用this
谈谈
Java
中的反射机制
前言 在使用框架进行开发时,我们的开发速度大大提升。我们感叹于它的神奇之处,我们使用它的时候,也要知道其“灵魂”。正所谓,无反射,不框架,框架的灵魂就是反射。 另外,我们在eclipse或者IDEA中编辑
Java
代码时,它们是怎么知道我们的对象有哪些方法,输入一个点就能给提示呢? 带着问题我们来谈谈反射。 概念 反射:是将一个类的各个部分封装为其他对象,这就是反射机制。 看着上面文邹邹的话语,想必大家并
没有
理解啥是反射。下面我们来通过一个例子来进行讲解。 我们来看一下我们的
Java
代码在计算机中经历的几个阶段: 第一个阶段:源代码阶段 首先,我们定义一个猫的类,包含名字,年龄,无参和全参构造方
Java
之路
你了解
Java
吗?你知道
Java
能做什么吗?你知道
Java
该怎么学吗?你知道
Java
未来的发展趋势、发展状况吗?
java
概述的PPT
对于初学者来说是很好的资源 简单性和完全面向对象 语法:放弃了C语言的全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型。 面向对象概念:放弃了多重继承、
友元类
和运算符重载,采用单重继承加接口的方式代替多重继承,提供语言级的内存自动管理和异常处理方式。 平台无关性
c++list类实现
1)代码注释很详细的,非常适合学习STL的。 2)数据结构里面两种非常重要的存储结构,线性结构中的连续存储结构(代表vector数组)和非连续存储结构(代表list链表),他们两者被广泛的应用在各个领域,是最基本最基础的两种存储结构; 3)之前的
友元类
只是停留在理论层面,真正实现还是头一次;
友元类
非常像
java
中的内部类
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章