Re: [问题] private继承问题

楼主: kiwatami (悠游自在)   2014-07-20 12:24:17
其实我的疑问很简单
public Class Parent{
private Foo foo;
private Bar bar;
public Foo getFoo(){
return foo;
}
public Bar getBar(){
return bar;
}
}
public Class Child extends Parent{
public void doSomething(){
Foo foo = this.getFoo();
}
private void doAnother(){
Bar bar = this.getBar();
}
}
public Class Arrangement{
public void init(){
Child child = new Child();
child.doSomething();
}
}
在doSomething中的getFoo();
是从哪里取得Foo这个物件的?
而Foo这个物件在这种情况下是存在于哪一个类别?
实作上的确会存在一个父类别的物件
而Foo及其getter也的确存在于父类别内而不是在子类别内
以下都是从定义上来阐述非实作上的真正行为
拿到继承这方面讲
定义上写着Child继承了Parent的getFoo()
但却没有继承Parent的Foo
所以定义上的流程应该是:
call getFoo() from Child -> return foo from Parent
or
call getFoo() from Parent -> return foo from Parent
如果是前者 不是非常奇怪吗?
没有继承foo 要从哪里跟Parent拿foo?
如果是后者 又何必用到"继承"这两个字?
只是开放存取权限而已 全部都是从Parent存取
如果只是为了extends去强加解释
那我认为一开始就直接用"扩充/扩展"会更容易理解
毕竟这也是我们用extends的目的
不知道各位能不能用自己的说法而不是官方文件
为小弟妹欧吉巴桑解惑一番?
以下是题外话
今天有一个人提出他对定义的看法
就表示不会只有他一个人这样想
像其他回文的板友一样
越多人提出自己的看法 有各种相同/不同的论点
整个讨论串的完整性就越高
但如果论点都只是你不该这样想、请你接受或是官方文件就这样说
那跟我们台湾人所受的教育有何不同?
都只是强迫的填鸭式教育罢了
从小老师的教学都是我们不能有自己的想法
不能用自己的想法去解题
就算答案对了 老师也不会解释过程有什么错误
而是回答 "因为课本不是这样教"
我觉得这才是真正应该改变的想法
※ 引述《sbrhsieh (十年一梦)》之铭言:
: ※ 引述《qrtt1 (有些事,有时候。。。)》之铭言:
: : 标题: Re: [问题] private继承问题
: : 时间: Wed Jul 16 09:49:27 2014
: : ............................................... 43
: : → kiwatami:官方文件有说我就不能问吗= =? 怎么感觉你很不想我发言 07/15 22:08
: : → Chikei:因为你一直在"你的想法"、"你觉得",这边是Java版我们在讨 07/15 22:59
: : → Chikei:论的是Java,那当然所有不清楚的名词最终都以JLS为标准 07/15 22:59
: : → Chikei:现在JLS直接说明了private field就是不会被继承,或者说这 07/15 23:00
: : → Chikei:就是Java the Language的"继承"定义,你再觉得不合理也请接 07/15 23:00
: : → Chikei:受,因为我们是在讨论Java语言。 07/15 23:01
: : → Chikei:当然要来大战Java定义的继承跟一般programmer谈到继承时候 07/15 23:08
: : → Chikei:的心灵模型一不一样不是不可,但很明显跟原po的问题无关 07/15 23:09
: : → TonyQ:其实我觉得都可以讨论啦 就是对语意了解不一致而已XD 07/16 06:21
: : → TonyQ:也没有人说不能/不想发言,原 po 多心了~ XD 07/16 06:22
: : → kiwatami:不好意思 从小到大我觉得不合理的都不会接受... 没有要吵 07/16 08:58
: : → kiwatami:架的意思啦 只是觉得好像讲出自己的想法反而不行的感觉 07/16 08:58
: : http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.2
: : Members of a class that are declared private are
: : not inherited by subclasses of that class.
: : 目前问题的关键在于 kiwatami 版友
: : 没有把 field 与 method 的继承视为独立事件。
: : Members of a class 可以是 field 或 method,
: : 版上已经接受规格定义的人,是将这二种 member 的继承与否当成独立事件
: :
作者: luoqr (.....)   2014-07-20 12:42:00
new Child时会顺便建构Father, 存取foo变量是跟father拿Father给的只有getFoo()并非变量本身不过实际上JVM会怎么分配内存 那就要看怎么实作JVM了?你可用其它方式解读"定义" 并无人限制你 只是沟通上方便而已你可以做一个真的会把变量继承给子类别的VM 也可以不要这样只要满足继承的条件就好
作者: pzyc79   2014-07-20 20:44:00
扩充感觉比较符合实际 继承好像独立出来的感觉
作者: luoqr (.....)   2014-07-20 22:59:00
实际上英文也是用extends而非inherit XD
作者: antiquerefer (antique refer)   2014-07-20 23:52:00
看来你不适合走这行 在软件里定义与接口是十分重要的虽然你可以使用实作观点去理解定义但不代表了解定义本身是不好的也不觉得那些回您定义的人是填鸭式教育反而觉得您是obstinate audience了解定义 -> 为什么这样定义(优缺) -> 定义的特性
作者: sbrhsieh (十年一梦)   2014-07-21 00:37:00
请问到目前为止,哪些回文/推文有在讨论为什么如此定义?
作者: antiquerefer (antique refer)   2014-07-21 04:25:00
因为连第一步都做不到了 何来第二步没有共识 就想要讨论具体? 先朝野协商吧
作者: Killercat (杀人猫™)   2014-07-21 06:13:00
很早很早很早以前是称为Father, 不过不知道是不是性别议题的关系,很早以前就改称Parent了 :P
作者: Kennyq (舞光十射~*)   2014-07-21 12:24:00
推l大 => 实际上英文也是用extends而非inherit
作者: AmosYang (泛用人型编码器)   2014-07-21 13:47:00
以前许多设计架构里也是用 master/slave 等字,现在也是改用 parent/child 了 :D
作者: Killercat (杀人猫™)   2014-07-21 14:48:00
IDE太早夭 不然应该也会被靠杯 XD
作者: sbrhsieh (十年一梦)   2014-07-21 15:51:00
就是没有共识才要讨论啊~摆什么架子
作者: gmoz ( This can't do that. )   2014-07-21 15:53:00
感觉像是文字游戏
作者: TonyQ (自立而后立人。)   2014-07-21 16:31:00
我认为是后者~从定义面来讲变量继承与否就是能存取与否而已
作者: danny8376 (钓到一只猴子@_@)   2014-07-21 19:59:00
为何这样定义? 你知道spec先要出来语言才会实做出来吗
作者: Eryngium (千夜一梦)   2014-07-22 08:48:00
推!!有些人根本想都没想过你的问题就狂否定

Links booklink

Contact Us: admin [ a t ] ucptt.com