作者GERRYccc (月狼)
看板java
标题Re: [问题] 请问有关於head first java书上程式码ꨠ…
时间Wed Jul 30 02:13:20 2008
※ 引述《king19880326 (OK的啦~我都可以接受)》之铭言:
: 这是出自head first java 一书 p.255
: 以下是程式码 :
: -------------------------------------------------------------------------
: abstract class Animal{
: private String name;
: public String getName(){
: return name;
: }
// 3. 2就是执行这里, 而且把传入的 theName 设定到private的name里
: public Animal(String theName){
: name = theName;
: }
: }
: class Hippo extends Animal{
// 2. 1就是执行这里, 而且super(name)会再执行Animal的建构子
: public Hippo(String name){
: super(name);
: }
: }
: public class MakeHippo{
: public static void main(String[] s){
: Hippo h = new Hippo("Buffy") ;
// ^^^^^^^^^^^^^^^^^^^^^ 1.会执行Hippo的建构子
: System.out.println(h.getName());
//^^^^^^^^^^^^ 4.会执行Hippo继承来的Animal的
// public method getName() 所以会印出 Buffy
: }
: }
以上不知道有没有解答到?...
: --------------------------------------------------------------------------
: 这是执行结果 :
: % java MakeHippo
: Buffy
: 因为 name 这个变数是private的
: 所以不会被 Hippo 继承下来
: 而getName() 这个 method 因为是public
: 所以会被继承下来
: 也就是说
: 目前的 Hippo 这个 class 只有自己的 constructor 和 getName
: (还有 Animal 的 constructor??)
^^^^^^^^^^^^^ 只有Hippo自己的 建构子(但里面用super呼叫了Animal的)
: 那在我的想法里 getName 应该是看不到 name 这个 variable OTZ
^^^^^^^^^^这里的 getName 是继承Animal的~所以可以取得到值
: 目前我提出的解释是这样 :
: 就是虽然说继承可以只写一份程式码
: 可是本质上还是跟写在各自的 class 不大相同
: 我记得之前看一本书上说
: instance method 都会多传一个 this 当作是参数
: 所以我猜测 Animal 这个 class 里 getName() 可以说是
: public String getName(Animal this){
: return this.name;
: }
: 而 Hippo 这个 class 里的 getName() 或许就是
: public String getName(Hippo this){
: return super.getName(this);
: }
: 因为有 polymorphism
: 所以导致仍然看得到 name 这个 variable
: 不知道我这样说对不对哩 @@>??
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^从以上这段,小弟才疏学浅看不懂在说啥...
: 请大家指教 <(__)>
以上。有误请指教~ 谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.232.57.45