Re: [問題] 請教關於多型的觀念

看板java作者 (CJ Cat)時間14年前 (2009/11/17 22:09), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)

11/16 23:49,
我覺得 polymorphism 從 polymorphic method 的意涵與
11/16 23:49

11/16 23:50,
行為來說明/舉例會比較適合。
11/16 23:50
那敝人就來獻醜舉例一下吧 :3 就用Head First Java最喜歡的Animal來當例子吧 Animal class裡面定義了一個makeSound() method 目的是要讓output視窗印出各種動物的叫聲 Dog和Cat分別繼承Animal,並且override該method class Animal { void makeSound() { System.out.println("..."); } } class Dog extends Animal { void makeSound() { System.out.println("woof"); } } class Cat extends Animal { void makeSound() { System.out.println("meow"); } } 接下來,以下的主程式會產生一個Dog和Cat物件 依序assign給一個Animal type的變數 同樣的都是呼叫該變數的makeSound() method 但是由於該變數指到的物件不同,而會去呼叫override版本的makeSound() Animal animal; animal = new Dog(); animal.makeSound(); //woof animal = new Cat(); animal.makeSound(); //meow 我記得在run-time時決定要呼叫哪一個版本的method 在C++好像有個術語叫做dynamic linking? 總之它的概念就是,儘管你的animal變數是Animal type 但是因為它所指到的物件有override原本的makeSound() method 於是override版本的method就會被使用,而不是原來在Animal裡面定義的版本 該呼叫哪個method是在run-time決定的 compiler在編譯的時候,只知道要呼叫這個變數的makeSound() method而已 而不知道到時候會是什麼型態的物件的makeSound() method會被呼叫到 這個就是polymorphism的概念 Strategy Pattern主要就是依靠polymorphism -- CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓 Blog http://cjcat.blogspot.com Gallery http://cjcat2266.deviantart.com ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.80.89
文章代碼(AID): #1B0gwQ9m (java)
討論串 (同標題文章)
文章代碼(AID): #1B0gwQ9m (java)