教程把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