1.组合:在一个新建类中使用已创建的一个类对象。
2.继承:继承语法指的是类B继承自某个类A,A为基类即父类,B为导出类即子类
public class B extends A {
}
(1)继承语法涉及的访问权限,基类中的某些成员变量,和成员方法,public或protect的导出类有使用权限。
(2)继承中涉及的构造函数的初始化:首先明白的一点是当创建了一个导出类的对象时候,该对象包含了一个基类的子对象。这个子对象和直接创建出的基类对象无区别。这个时候初始化相当重要,就涉及到构造函数,当无参数的时候,java会自动的帮创建:
class Art {
Art() {
System.out.println("Art constructor");
}
}
class Drawing extends Art {
Drawing() {
System.out.println("Drawing constructor");
}
}
public class Cartoon extends Drawing {
Cartoon() {
System.out.println("Cartoon constructor");
}
public static void main(String[] args) {
Cartoon x = new Cartoon();
}
}
当有参数的时候:必须采用super关键字初始化:
class Game {
Game(int i) {
System.out.println("Game constructor");
}
}
class BoardGame extends Game {
BoardGame(int i) {
super(i);
System.out.println("BoardGame constructor");
}
}
public class Chess extends BoardGame {
Chess() {
super(11);
System.out.println("Chess constructor");
}
public static void main(String[] args) {
Chess x = new Chess();
}
}
(3)向上转型:所谓的导出类和基类,实际上指的是表现新类和基类的关系,用新类是基类的一种类型。导出类只是基类的超集。如果导出类向基类进行向上转型,则继承是必须的,如果不需要,那就要考虑是否要使用继承关系
(4)覆盖的问题:所谓的覆盖。。导出类只覆盖protect和public的方法,基类中有private或final的方法的时候,不是覆盖,如果有相同的问题,那只是一个新的方法。
(5)继承的,在创建对象的时候,先加载类,当基类和导出类都加载完后,再创建对象的。
3.继承和组合:
(1)组合技术通常是用现有的类的功能而非它的接口。实现功能而已,而继承则是使用现有类,并特殊化这个类
(2)可以使用代理,即在新类中同样是实现方法,但不自己执行,让现有类去执行。
(3)判断是使用继承还是组合,就判断这个类是否有必要向上转型