教程把is-A和Has-A放在一塊兒,我還覺得java支持簡單的方法能把Has對象的方法導出呢。。java
extents implementsc++
要試一下。ide
不知道狗和汽車爲何老是被選出來舉例。函數
package Language; /** * * 面向對象接口 * @author y */ public interface IFace2Object { String getClassKey(); Boolean AllowMutilInhert(); }
package Language; /** * * 開發語言基類 * @author y */ public abstract class ProgramLanguage { public abstract String getMyType(); }
package Language; /** * * C語言 * @author y */ public class PL_C extends ProgramLanguage { @Override public String getMyType() { return "C"; } }
package Language; /** * * @author y */ public class PL_Cpp extends ProgramLanguage implements IFace2Object { @Override public String getMyType() { return "C++"; } @Override public String getClassKey() { return "class"; } @Override public Boolean AllowMutilInhert() { return true; } }
public class PL_Java extends ProgramLanguage implements IFace2Object { @Override public String getMyType() { return "Java"; } @Override public String getClassKey() { return "class"; } @Override public Boolean AllowMutilInhert() { return false; } }
練練寫法就好了,就不寫測試代碼了,不必。測試
@Override不知道作什麼用的,先看吧。難道是相似 c++11的override關鍵字?spa
Java的方法重寫,沒必要在父類中聲明,反而是隻有final的方法不能被重寫。c++11
Super能夠直接調用父類方法,而沒必要要知道父類名。這頗有用。更改父類沒必要要搜索父類名,在C++中則很煩。code
不過c++ 能夠typedef BaseClassName BaseClass,來簡化。對象
函數的重載沒什麼說的,我只好奇,子類重載父類中的函數時, 調用子類的父類函數接口,可否正常調用。C++是不行的,看你的了,java。blog
package Language; /** * * @author y */ public class PL_Cpp extends PL_C implements IFace2Object { public String getMyType(Boolean bCpp){ return bCpp ? "C++" : "C"; } @Override public String getClassKey() { return "class"; } @Override public Boolean AllowMutilInhert() { return true; } public static void main(String[] args){ PL_Cpp tp = new PL_Cpp(); String sType = tp.getMyType(); System.out.println("Cpp Default Type = " + sType); } }
輸出:
run:
Cpp Default Type = C
成功構建 (總時間: 0 秒)
能夠調用哦。
在C++中,對父類非虛函數的重載叫重寫,JAVA彷佛不這麼叫。
JAVA中純虛函數不能實現。
接口的繼承也用extends