教程把is-A和Has-A放在一起,我还以为java支持简单的方法能把Has对象的方法导出呢。。
extents implements
要试一下。
不知道狗和汽车为什么总是被选出来举例。
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关键字?
Java的方法重写,不必在父类中声明,反而是只有final的方法不能被重写。
Super可以直接调用父类方法,而不必要知道父类名。这很有用。更改父类不必要搜索父类名,在C++中则很烦。
不过c++ 可以typedef BaseClassName BaseClass,来简化。
函数的重载没什么说的,我只好奇,子类重载父类中的函数时, 调用子类的父类函数接口,能否正常调用。C++是不行的,看你的了,java。
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