社区
Java SE
帖子详情
java怎么没有友元类?
youqika
2009-04-13 10:47:14
假设所有的类在同一包当中,有两个public的类A和B(假设B的所用属性及方法都是静态的),假设A中有一个方法setX()只想被B调用,而不能被其他类使用,
如果不用反射的话,应该怎么做?
...全文
1235
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
浅析面向对象语言C_与
Java
区别_王艳娟1
浅析 面回对象 语言 C + + 与 J a v a 区别济南职 业 学院王艳娟【摘要 ]随 着人们 对信 息 需 求的 不 断 变 化, 计算机语言 经 历
基于
Java
的源码-访问权限控制源代码.zip
基于
Java
的源码-访问权限控制源代码.zip
java
概述的PPT
对于初学者来说是很好的资源 简单性和完全面向对象 语法:放弃了C语言的全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型。 面向对象概念:放弃了多重继承、
友元类
和运算符重载,采用单重继承加接口的方式代替多重继承,提供语言级的内存自动管理和异常处理方式。 平台无关性
Java SE
62,636
社区成员
307,271
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章