Interface (from Java):
Following reference from my colleague YaChun:
A Interface can help designer to implement one function (method) for different class.
Example:
Interface CanFlying {
public void doFlying();
}
Interface CanWalking {
public void doWalking();
}
class ActionManager(){
if (obj instanceof CanFlying) { <----- 是可飛的東西,就執行飛吧~
CanFlying flyObj = (CanFlying) obj;
flyObj.onFlying();
}
if (obj instanceof CanWalking) { <----- 是會走的東西,就執行走吧~
CanWalking walkObj = (CanWalking) obj;
walkObj.onWalking();
}
}
}
-> one method ActionManager.doAction can deal with walking and flying of different classes
-> Polymorphism
Abstract Class而Abstract class in C++, 一旦定義了一個pure virtual
function 這個function 雖然定義好了傳進去的參數, 但是真實的動作會在 derived class 才定義,
這也是為了那實際上使用時只要有一個 actionManager 去 使用這個virtual function 那
也是可以透過一個actionManager 管理多個classes-> 同樣也是為了polymorphism
兩個一起看的話在C++中, 若同時繼承多個abstract class 跟 Java 同時 implement 多個 interface 感覺概念上是類似的
因此基於以上兩點, 我覺得 Interface 和 Abstract class 都是
同樣的
目的 (
polymorphism), 只是Java 透過 interface的定義, 而 C++透過繼承 abstract class 來達到.
另外還有一點不同
可能是 java 在 compile time 的時候就會做到這個 polymorphism
而C++ 的Pure function 應該是runtime 才會做的
有關 C++ Abstract class 的文件
http://www.parashift.com/c++-faq-lite/abcs.html