Re: [问题] 在子类别new建构子为protected的父类别

楼主: sbrhsieh (十年一梦)   2014-05-12 16:16:47
※ 引述《lovdkkkk (dk)》之铭言:
: 意思是 call 自己的与 invoke 别人的的差别?
: 如果这是主因,而和 Test 是不是自己的 subclass 无关的话...
: 这样去想感觉有点更复杂,先暂停 XDD
: (super.protectedMethod 之类...
: 疴,暂停暂停)
: 总之,受教了。
我其实还蛮苦恼的,因为 protected 与 package default 修饰词的差别对不少人
来说是模糊的(这包括那些可以说出“ protected 就是比 package default 多了在
subclass 可以用”的人),但是我尚未发现一个比较能够让人了解的说法。
或许这是我最后一次尝试了,不以文字叙事为主的说明方式,而是以比较完整却
又不是非常复杂的表列方式,来揭露 protected 与 package default 的差异。
首先假设有一个 class C 属于 package P。
为了单纯,由 class A 可以 access 到 class B 的那些 memeber,构成 B
对 A 的界面(就是 A 看 B 时能看到的东西),凡是 class A 面对 B 时所无法
存取到的(不管编译器抱怨的理由是什么),就不属于 B 对 A 的界面。
那么下表一,横列是定义于 C 的 member。
纵轴是 C 对各种类型的 class 的界面是否包含横列所示的 member。
#表一
member defined in C
public package protected private
====================================================================
class C O O O O
class other than C O O O X
in P
class other than C O X X X
NOT in P
class derived from C O O O X
in P
class derived from C O X X X
NOT in P
这部分应该是为人熟悉的:因为标的物是定义 member 的 class C,所以 protected
与 package default 是完全相同的。
接着假设有个 class D extends C in P,class E extends C NOT in P
(p.D extends p.C, q.E extends p.C)
#表二 针对 class D 对左列类型所透露出的界面
member defined in C
public package protected private
====================================================================
class D O O O X
class other than D O O O X
in P
class other than D O X X X
NOT in P
class derived from D O O O X
in P
class derived from D O X X X
NOT in P
protected 与 package default 的作用依然无差别,因为 subclass D 与 C 同在 P,
"继承"造成的影响被 package default 的影响覆蓋。
另,除了 private 在继承方面起了作用外,表二与表一是一样的。
#表三 针对 class E 对左列类型所透露出的界面
member defined in C
public package protected private
====================================================================
class E O X O X
class other than E O X O X
in P
class other than E O X X X
NOT in P
class derived from E O X O X
in P
class derived from E O X X X
NOT in P
这里显露出 protected/package default 的差别,当 subclass E 不在 package P
中,protected 跳出 package default 的涵盖范围,得显露出其独特的影响力。
我前一篇提到把 protected member 看成可透过继承而视同定义在 subclass 的
看法,对许多人而言是比较容易去理解与接受的,但是他的缺点是抱持这种观点者,
实不容易正确写出表二、表三。
作者: TonyQ (自立而后立人。)   2014-05-12 16:28:00
推~ package default 其实真的不太容易说明 XD
楼主: sbrhsieh (十年一梦)   2014-05-12 17:18:00
真的要说 protected 多出来的作用就是表三的列一而已。表三其他列还是由 package default 主导。以上是在把 protected 看成 package 加上什么的看法而言
作者: lovdkkkk (dk)   2014-05-12 18:27:00
推列表 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com