作者king19880326 (OK的啦~我都可以接受)
看板java
標題[問題] 請問有關於head first java書上程式碼的問題??
時間Mon Jul 28 21:52:41 2008
這是出自head first java 一書 p.255
以下是程式碼 :
-------------------------------------------------------------------------
abstract class Animal{
private String name;
public String getName(){
return name;
}
public Animal(String theName){
name = theName;
}
}
class Hippo extends Animal{
public Hippo(String name){
super(name);
}
}
public class MakeHippo{
public static void main(String[] s){
Hippo h = new Hippo("Buffy") ;
System.out.println(h.getName());
}
}
--------------------------------------------------------------------------
這是執行結果 :
% java MakeHippo
Buffy
因為 name 這個變數是private的
所以不會被 Hippo 繼承下來
而getName() 這個 method 因為是public
所以會被繼承下來
也就是說
目前的 Hippo 這個 class 只有自己的 constructor 和 getName
(還有 Animal 的 constructor??)
那在我的想法裡 getName 應該是看不到 name 這個 variable OTZ
目前我提出的解釋是這樣 :
就是雖然說繼承可以只寫一份程式碼
可是本質上還是跟寫在各自的 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: 125.233.241.84
推 pinglunliao:這跟 Access Modifiers (private, public) 有關 07/31 08:22
→ pinglunliao:這範例還稱不上 polymorphism 的應用 07/31 08:24