廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 9138 個閱讀者
 
<<   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.020820 second(s),query:5 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言