教程把is-A和Has-A放在一起,我还以为java支持简单的方法能把Has对象的方法导出呢。。
extents implements
要试一下。
不知道狗和汽车为什么总是被选出来举例。
packageLanguage;/***
* 面向对象接口
*@authory*/
public interfaceIFace2Object {
String getClassKey();
Boolean AllowMutilInhert();
}
packageLanguage;/***
* 开发语言基类
*@authory*/
public abstract classProgramLanguage {public abstractString getMyType();
}
packageLanguage;/***
* C语言
*@authory*/
public class PL_C extendsProgramLanguage {
@OverridepublicString getMyType() {return "C";
}
}
packageLanguage;/***
*@authory*/
public class PL_Cpp extends ProgramLanguage implementsIFace2Object {
@OverridepublicString getMyType() {return "C++";
}
@OverridepublicString getClassKey() {return "class";
}
@OverridepublicBoolean AllowMutilInhert() {return true;
}
}
public class PL_Java extends ProgramLanguage implementsIFace2Object {
@OverridepublicString getMyType() {return "Java";
}
@OverridepublicString getClassKey() {return "class";
}
@OverridepublicBoolean AllowMutilInhert() {return false;
}
}
练练写法就行了,就不写测试代码了,没必要。
@Override不知道做什么用的,先看吧。难道是类似 c++11的override关键字?
Java的方法重写,不必在父类中声明,反而是只有final的方法不能被重写。
Super可以直接调用父类方法,而不必要知道父类名。这很有用。更改父类不必要搜索父类名,在C++中则很烦。
不过c++ 可以typedef BaseClassName BaseClass,来简化。
函数的重载没什么说的,我只好奇,子类重载父类中的函数时, 调用子类的父类函数接口,能否正常调用。C++是不行的,看你的了,java。
packageLanguage;/***
*@authory*/
public class PL_Cpp extends PL_C implementsIFace2Object {publicString getMyType(Boolean bCpp){return bCpp ? "C++" : "C";
}
@OverridepublicString getClassKey() {return "class";
}
@OverridepublicBoolean AllowMutilInhert() {return true;
}public static voidmain(String[] args){
PL_Cpp tp= newPL_Cpp();
String sType=tp.getMyType();
System.out.println("Cpp Default Type = " +sType);
}
}
输出:
run:
Cpp Default Type = C
成功构建 (总时间: 0 秒)
可以调用哦。
在C++中,对父类非虚函数的重载叫重写,JAVA似乎不这么叫。
JAVA中纯虚函数不能实现。
接口的继承也用extends