复用类
1.为了继承,一般的规则是:将所有数据成员都指定为private,所有的方法指定为public
2.在继承过程中,需要先声明“新类和旧类相似”,用关键字“extend”实现。这么做,会得到基类中的所有域和方法
3.在继承关系中,如果导出类和基类有相同的方法,但你想在导出类中调用从基类继承来的方法,可以用关键字“super”来表示超类,用表达式“super.functionname()”来调用基类版本的functionname();并且,如果没有默认的基类构造器,或者想用一个带参数的基类构造器,就必须用关键字“super”显式地编写调用基类构造器的语句,并且配上适当的参数列表
class Game1 { Game1(int i){ System.out.println("Game1 costructor"); } } class BoardGame extends Game1{ BoardGame(int i){ super(i); System.out.println("BoardGame costructor"); } } public class Chess extends BoardGame{ Chess(){ super(11); System.out.println("Chess costructor"); } public static void main(String[] args) { // TODO Auto-generated method stub Chess xChess = new Chess(); } }
/*output:
Game1 costructor
BoardGame costructor
Chess costructor*/
4."is-a(是一个)"的关系用继承来表达,"has-a(有一个)"的关系用组合来表达
“向上转型”即由导出类转成基类,是一个从较专用的类型转换为较通用的类型的过程
在OOP中,尽管多次强调“继承”,但应慎用这种技术。“组合”是在新类中嵌入某个对象,让其实现所需功能,但新用户看到的只是为新类定义的接口,而非所嵌入对象的接口,成员对象对自身都隐藏了具体实现,这种做法是安全的。因此,如果需要从新类向基类进行向上转型,则“继承”是必要的,否则,最好使用“组合”。