java 板


LINE

※ 引述《sbrhsieh (十年一梦)》之铭言: : : 实测下来结果也是如此,参见 gist : : https://gist.github.com/anonymous/2d80bf9eb1581ed05fc6 : : -- : : 我只是很单纯的照官方文件说法去看 : : 截录: : : within its own package (as with package-private) and, in addition, : : by a subclass of its class in another package. : : 官方说明的就是这两个条件 : : 1. 在同 package 里 call : : 2. 由 subclass call : : 所以我才会由 : : 是不是同 package 或 是不是 subclass 去看 @@ : 是不是 package 或 subclass 是指 member access(含 method call/field access/ : construction) expression 所在的 context。 : 以这个例子来说: : new Test(...).protectedMethod(); : 试看这一串(statement/expression)出现在哪个 class 里,由这个 class 的处境 : 来看是否可以接受此等 access,而不是看 new Test(...) 这个 object 所属的 : class。 以上与我的认知相同,不是看所属 class。 : 你在文中所提(红色部分),我感觉上就是不对劲。到底能不能透过 protected : constructor 来建构 Test object,与 call 一个 Test object 的 protected : method 是跟这些操作是出现在哪个 class 有关,与 Test 是不是 Test 的 : subclass 没有任何关系。 : 你会加上 Test 不是 Test subclass 这一点来说服你自己,表示你还是对 protected : 的意义误解。你无法说服你自己为什麽在 Test 的 subclass 里无法透过 protected : constructor 建构 Test instance,也不能 call Test object 的 protected : method,你解读 spec. 的认知还是停留在 protected member 可以在 subclass 里 : access 这种单纯的描述。 不...是因为文件这麽写啊 @@", 文件说 在同 package 内 或 被 subclass call 可以, 那在不同 package 内时不行, 应该就是因为也不是被 subclass call。 : 有一群人倾向以继承的观点来看,我觉得这是个比较好的看法。 : 即使 Test2 与 Test 处在不同 package,但是 Test2 extends Test 使得 Test 的 : 所有 protected field/method 如同定义在 Test2 class 里。所以 Test2 object : 可以去存取/执行任一个 Test2 object(同类)的这些(继承下来的) field/method。 : (同类之间的 private field/method 也都可以互相 access/call) : 但是 Test2 extend Test 不代表 Test2 就定可以存取 Test class 所定义的 : protected field/method。(Test/Test2 不同 package 时还是不行,同 package 下 : 则同 package default 的规范,是可以的) : // in class Test2 extends Test : public void someMethod(Test t1, Test2 t2) { : t1.protectedMethod(); : t2.protectedMethod(); : this.protectedMethod(); : } : 第一个 statement 与 2nd, 3rd statement 意义是不同的,前者是要 invoke : Test::protectedMethod(),後者是 Test2::protectedMethod,所以两者合不合格 : 所聚的焦点是不同的。 : 1. Test2 可不可以 access Test::protectedMethod。 /* No */ : 2/3. Test2 可不可以 access Test2::protectedMethod。/* Yes */(透过继承 : Test2 确实有这个 protectedMethod,Test2 的 private method 都可以 : access 了,故...) : 尽管最後在 runtime 所执行(if possible) 其实是同一个 method implementation, : 但就 Java PL 语法层面的规范是这样的。 意思是 call 自己的与 invoke 别人的的差别? 如果这是主因,而和 Test 是不是自己的 subclass 无关的话... 这样去想感觉有点更复杂,先暂停 XDD (super.protectedMethod 之类... 痾,暂停暂停) 总之,受教了。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.196.214
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/java/M.1399819745.A.595.html
1F:推 sbrhsieh:自己与别人有些笼统,access规则是看 class与 class之间 05/11 22:51
2F:推 sbrhsieh:不是 instance 与 instance 之间 05/11 22:59







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP