物件導向的"過載"與"撤銷"問題。 |
尚未結案
|
warke
一般會員 發表:19 回覆:32 積分:10 註冊:2004-09-04 發送簡訊給我 |
各位大大:
小弟在使用物件導向的時候有發生一點問題,想請各位大大幫忙解答一下。
底下這段程式碼會出現錯誤。
class Animal { public void eat() { System.out.println("Class Animal : eat()"); } } class Horse extends Animal { public void eat() { System.out.println("Class Horse : eat()"); } public void eat(String s) { System.out.println("Class Horse : eat(String s), s = " s); } } class t { public static void main (String[] arg) { Animal a = new Animal(); System.out.println("Animal a :"); a.eat(); Horse b = new Horse(); System.out.println("Horse b :"); b.eat(); Animal c = new Horse(); System.out.println("Animal c :"); c.eat(); Horse d = new Horse(); System.out.println("Horse d :"); d.eat("Love U"); Animal e = new Animal(); System.out.println("Animal e :"); e.eat("can't Love U"); Animal f = new Horse(); System.out.println("Animal f :"); f.eat("Loving U"); } }訊息如下: t.java:41: eat() in Animal cannot be applied to (java.lang.String) e.eat("can't Love U"); ^ t.java:45: eat() in Animal cannot be applied to (java.lang.String) f.eat("Loving U"); ^ 2 errors第一個錯誤﹝e﹞小弟知道這是因為 class Animal 不能接受輸入 String。 但是第二個錯誤﹝f﹞呢? Animal c = new Horse(); System.out.println("Animal c :"); c.eat();和 Animal f = new Horse(); System.out.println("Animal f :"); f.eat("Loving U");不是一樣的嗎?他都是new了一個Horse架構在Animal之下阿。 這樣的話我的 Class Horse 中有含接收字串的方法阿。 class Horse extends Animal { public void eat() { System.out.println("Class Horse : eat()"); } public void eat(String s) { System.out.println("Class Horse : eat(String s), s = " s); } }請各位大大幫小弟解答一下好嗎?拜託拜託qq"~~ 最後...請問一下物件導向是叫做:Object Oriented Programming, OOP。 那..."過載"與"撤銷"的英文是什麼啊? |
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
你的 Animal f = new Horse();到執行時期,只參考到Animal的定義內容,
除非是 ((Hourse)f).eat("草"),強制型態轉換才行.
overload--重載.指的是同一類別中,同樣的函數名稱,不同的參數列,如:
Class youclass{ void funcA(){....} void funcA(int a,int b){....} }本例中,funcA就是有overload的情形 至於你說的"撤銷" ? 可以說一下上下文嗎?沒這方面的印象說 物件導向的範圍很大,但不是寫成了類別的語言就是物件導向, 最初階的"資料封裝",多型等原則,到目前最熱門的designe pattern,都是OOP的範圍,建議你去找一下"java設計典範"這類的書比較有完整的學習. |
warke
一般會員 發表:19 回覆:32 積分:10 註冊:2004-09-04 發送簡訊給我 |
首先感謝 neoart 大大這麼快就回覆了。
書裡面所提到的'撤銷',是指下面程式碼的動作。
public class Cat { public void love() { System.out.println("波斯貓咪著他的雙眼,波斯貓踮著他的腳尖,波斯貓守著他的愛戀,一轉眼卻又看不見。"); } } class NewCat extends Cat { public void love() { System.out.println("加菲貓咪著他的雙眼,加菲貓搖著他的游泳圈,加菲貓守著他的甜點,一轉眼卻又看不見。"); } }請問一下這樣的話他的英文是啥阿qq? 謝謝^^~ |
warke
一般會員 發表:19 回覆:32 積分:10 註冊:2004-09-04 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
引言: 首先感謝 neoart 大大這麼快就回覆了。 書裡面所提到的'撤銷',是指下面程式碼的動作。這種情形叫"overwrite",叫撤銷太沈重了 我個人比較認同"覆蓋"或是"覆寫"的翻譯方式 意即,同一個方法(函數),子類別改變其定義public class Cat { public void love() { System.out.println("波斯貓咪著他的雙眼,波斯貓踮著他的腳尖,波斯貓守著他的愛戀,一轉眼卻又看不見。"); } } class NewCat extends Cat { public void love() { System.out.println("加菲貓咪著他的雙眼,加菲貓搖著他的游泳圈,加菲貓守著他的甜點,一轉眼卻又看不見。"); } }請問一下這樣的話他的英文是啥阿qq? 謝謝^^~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |