其实我的疑问很简单
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 的继承与否当成独立事件
: :