Re: [問題] 請教關於多型的觀念
→
11/16 23:49,
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
討論串 (同標題文章)