廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 6827 個閱讀者
 
<<   1   2  下頁 >>(共 2 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
對的人
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x228
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[Java][求助] 繼承觀念問題
各位大大好,我是超級新手,有幾個觀念性的問題想請教,以下是Code:

Code太長,改用臨時網頁代替:http://myhome.kbronet.com.tw/a1986751106/
我的問題是...如果把這段刪除的話,結果還 ..

訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容



獻花 x0 回到頂端 [樓 主] From:臺灣凱擘 | Posted:2009-04-07 00:13 |
overing 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x55
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

把目錄下的 .class 檔都殺乾淨再編譯看看

之所以你第二次刪除這段還能編譯成功
我想是因為前一次編譯已經有產生 Land.class
第二次編譯雖然你刪掉Land的定義
不過編譯器會嘗試尋找workpath還有classpath底下
有沒有 Land.java(或有定義Land的其他 .java) 或是 Land.class
有找到而且繼承架構正確還是會讓你編譯成功

另外...code麻煩記得縮排一下 表情
多按幾個空白或是TAB鍵會讓你的程式看起來好讀很多


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
獻花 x1 回到頂端 [1 樓] From:未知地址 | Posted:2009-04-09 08:37 |
對的人
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x228
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

感謝大大回應,我知道了^^。


不過還有個問題:
return (int)( this.price()-l.price())

請問這段 的 this.price 的值為多少? 這樣問好像不對,他所指的this.price()是從哪 抓的?


獻花 x0 回到頂端 [2 樓] From:臺灣凱擘 | Posted:2009-04-09 23:09 |
overing 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x55
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

this 同常指的是 類別定義 所生成的物件本身
相對的詞是super 指的是父類別 生成的物件
通常用在子類有複寫父類的成員時 要指明用哪邊的成員

舉個例子可能不是很貼切 看看就好
複製程式
class Father {
    void printMe() { System.out.println("Father"); }
}
public class Son extends Father {
    void printMe() { System.out.println("Son"); }
    void printMyFather() { super.printMe(); }
    public static void main(String[] argv) {
        Son s = new Son();
        s.printMe();
        s.printMyFather();
    }
}


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
獻花 x1 回到頂端 [3 樓] From:未知地址 | Posted:2009-04-11 05:10 |
對的人
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x228
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

大大我是懂this 的用法, 但我的問題..還是搞不懂..

return (int)( this.price()-l.price())


我應該要問,this.price()抓取的第一次的值為多少?


獻花 x0 回到頂端 [4 樓] From:臺灣凱擘 | Posted:2009-04-11 20:59 |
overing 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x55
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你確定 this 的意思真的有弄懂嗎? 表情

這 this 是位在 abstract class Land 下
所以真正 this 的時候是會去指到繼承 Land 的類別所生產出來的物件本身

而他呼叫的 price() 方法在 Land的定義中也是抽象的
所以真正在呼叫的時候 會呼叫的是"實作"了這方法的子類別

複製程式
Land l1 = new Circle(5,1000);
Land l2 = new Square(3,2000);
l1.price(); //這呼叫的是 Circle 的
l2.price(); //這呼叫的就是 Square 的了

抽象的東西是沒有實體的
全看你真正去生成時 是什麼物件(物件才有實體)
來決定這抽象的東西是什麼


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
獻花 x1 回到頂端 [5 樓] From:未知地址 | Posted:2009-04-11 21:17 |
對的人
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x228
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這 this 是位在 abstract class Land 下
所以真正 this 的時候是會去指到繼承 Land 的類別所生產出來的物件本身

那請問大大...l.price() 方法 不就等於 this.price() ?? 這樣兩個互減要怎排序??


獻花 x0 回到頂端 [6 樓] From:臺灣凱擘 | Posted:2009-04-11 21:26 |
overing 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x55
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

這兩個並不是"同一個"物件呦~
複製程式
    public int compare(ICanCompare i) { // 實作compare
        Land l = (Land) i;
        return (int)(this.price() - l.price()); // 依據面積比較大小
    }
this 這個是呼叫 compare() 這方法本身的物件
l 這個是透過參數 i 傳近來之後 當成(Land) 的物件

往回看看呼叫 compare() 的地方
複製程式
    static void bSort(ICanCompare[] objs){
        for(int i=objs.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                if(objs[j].compare(objs[j+1])<0){
                    ICanCompare temp=objs[j];
                    objs[j]=objs[j+1];
                    objs[j+1]=temp;
                }
            }
        }
    }
if(objs[j].compare(objs[j+1])<0)
注意看~經過這行呼叫的 compare()
到return的時候 是會變成 objs[j].price() - objs[j+1].price() 的呦~ 表情


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
獻花 x1 回到頂端 [7 樓] From:未知地址 | Posted:2009-04-11 21:41 |
對的人
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x228
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

那請問...

if(objs[j].compare(objs[j+1])<0)

compare方法裡面傳的是什麼參數?? 如果他是寫這樣 我還可以理解:
if(objs[j].compare(objs[j+1]))


如果照原本方法,要傳什麼東西?


獻花 x0 回到頂端 [8 樓] From:臺灣凱擘 | Posted:2009-04-11 22:09 |
overing 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x0 鮮花 x55
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

if(objs[j].compare(objs[j+1]))
的話就沒意義了 編譯器也不會給過的
if()條件裡面敘述句最後的運算結果必須是 boolean
可是 compare() 方法的傳回值是
public int compare(ICanCompare i) {}
是 int 而這個int代表的是兩物件之間的面積差

所以回到 if(objs[j].compare(objs[j+1])<0)來看
這句翻成白話文 "如果 objs[j] 面積減 objs[j+1]面積 小於0就..."
那段的程式碼就是一個個去互相比較
如果陣列中 第 j 位置的形狀面積減去 第 j+1位置的形狀面積小於0
表示 j那位置的形狀面積 比 j+1位置的形狀面積小
於是就將兩個交換位置
因為排序後的陣列要"面積大的在上面"

複製程式
//這是典型的氣泡式排序法
    static void bSort(ICanCompare[] objs){ //排序用的副程式 參數接受一個 ICanCompare陣列
        for(int i=objs.length-1;i>0;i--){ //迴圈, i由陣列最底端開始, >0就繼續執行, 每圈完 i-1
            for(int j=0;j<i;j++){ //迴圈, j從0開始, <i就繼續執行, 每圈完 j-1
                if(objs[j].compare(objs[j+1])<0){ //如果 陣列中第j位置的形狀面積-第j+1位置的形狀面積<0 (表示j+1那個形狀比較大)
                    ICanCompare temp=objs[j]; //開個暫存空間放 陣列位置j的形狀
                    objs[j]=objs[j+1]; //將陣列j+1位置的形狀放到陣列j位置
                    objs[j+1]=temp;//將暫存的形狀放到陣列位置j+1
                }
            }
        }
    }


[ 此文章被overing在2009-04-11 22:41重新編輯 ]

此文章被評分,最近評分記錄
財富:50 (by 三仙) | 理由: 因為您的參與,讓程式設計更容易!!


Zippy G2 600W
Intel C2Q Q9550
Gigabyte GA-X48-DQ6
Gigabyte GV-NX96T512H-B
G-skill pi 1100MHz 2Gx4
ACARD ANS-9010 32GB (Windows7 10sec boot!!)
WD 150GB(WD1500ADFD)/640GB(6400AASK)
獻花 x1 回到頂端 [9 樓] From:未知地址 | Posted:2009-04-11 22:29 |

<<   1   2  下頁 >>(共 2 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.066223 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言