作者cjcat2266 (CJ Cat)
看板java
标题Re: [问题] 请教关於多型的观念
时间Tue Nov 17 22:09:27 2009
1F:→ sbrhsieh:我觉得 polymorphism 从 polymorphic method 的意涵与 11/16 23:49
2F:→ sbrhsieh:行为来说明/举例会比较适合。 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