線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1275
推到 Plurk!
推到 Facebook!

物件導向的"過載"與"撤銷"問題。

尚未結案
warke
一般會員


發表:19
回覆:32
積分:10
註冊:2004-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 16:07:41 IP:218.170.xxx.xxx 未訂閱
各位大大: 小弟在使用物件導向的時候有發生一點問題,想請各位大大幫忙解答一下。 底下這段程式碼會出現錯誤。
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-24 16:41:35 IP:61.64.xxx.xxx 未訂閱
你的 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-24 16:59:47 IP:218.170.xxx.xxx 未訂閱
首先感謝 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 17:04:59 IP:218.170.xxx.xxx 未訂閱
小吐嘈一下^^" ((Hourse)f).eat("草");裡面阿 是horse不是hourse啦~~ :P~~感謝 neoart 大大喔^^~ 大致上已經懂了^^
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-24 17:10:27 IP:61.64.xxx.xxx 未訂閱
引言: 首先感謝 neoart 大大這麼快就回覆了。 書裡面所提到的'撤銷',是指下面程式碼的動作。
public class Cat
{
        public void love()
        {
                System.out.println("波斯貓咪著他的雙眼,波斯貓踮著他的腳尖,波斯貓守著他的愛戀,一轉眼卻又看不見。");
        }
}
class NewCat extends Cat
{
        public void love()
        {
                System.out.println("加菲貓咪著他的雙眼,加菲貓搖著他的游泳圈,加菲貓守著他的甜點,一轉眼卻又看不見。");
        }
}
請問一下這樣的話他的英文是啥阿qq? 謝謝^^~
這種情形叫"overwrite",叫撤銷太沈重了 我個人比較認同"覆蓋"或是"覆寫"的翻譯方式 意即,同一個方法(函數),子類別改變其定義
系統時間:2024-05-09 6:54:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!