提示,类与类之间最常见的关系主要有三种:依赖(uses–a)、聚合(has–a)、继承(is–a)。详情请查看:Java类与类之间的关系。
在面向对象世界里面,常常要创建某对象(如:一个职员对象),然后需要一个该基本对象的更专业化的版本,比如,可能需要一个经理的对象。显然经理实际上是一个职员,经理和职员具有 is-a 的关系,经理只是一个带有附加特征的职员。因此,需要有一种办法从现有对象来创建一个新对象,这个方式就是继承。现实中的事务,只要具有 is-a 的关系,在 java 中都可以用继承表示。
“继承”是面向对象软件技术当中的一个概念。如果一个对象 A 继承自另一个对象 B,就把这个 A 称为“B 的子对象”,而把 B 称为“A 的父对象”。 继承可以使得子对象具有父对象的各种属性和方法,而不需要再次编写相同的代码。 在令子对象继承父对象的同时,可以重新定义某些属性,并重写某些方法,即覆盖父对象的原有属性和方法,使其获得与父对象不同的功能。
public class Employee {
String name;
Date hireDate;
Date dateOfBirth;
String jobTitle;
int grade;
...
}
public class Manager extends Employee {
String department;
Employee[] subordinates;
...
}
在这样的定义中,Manager 类被定义,具有 Employee 所拥有的所有变量及方法。所有这些变量和方法都是从父类的定义中继承来的。所有的程序员需要做的是定义额外特征或规定将适用的变化。
注意:这种方法是在维护和可靠性方面的一个伟大进步。如果在 Employee 类中进行修改,那么,Manager 类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。
Java 编程语言允许一个类仅能继承一个其它类,即一个类只能有一个父类。这个限制被称做单继承性。单继承性与多继承性的优点是面向对象程序员之间广泛讨论的话题。Java 编程语言加强了单继承性限制而使代码更为可靠,尽管这样有时会增加程序员的工作。后面会学到一个被叫做接口(interface)的语言特征,它允许多继承性的大部分好处,而不受其缺点的影响。使用继承性的子类的一个例子如图所示:
在面向对象世界里面,常常要创建某对象(如:一个职员对象),然后需要一个该基本对象的更专业化的版本,比如,可能需要一个经理的对象。显然经理实际上是一个职员,经理和职员具有 is-a 的关系,经理只是一个带有附加特征的职员。因此,需要有一种办法从现有对象来创建一个新对象,这个方式就是继承。现实中的事务,只要具有 is-a 的关系,在 java 中都可以用继承表示。
“继承”是面向对象软件技术当中的一个概念。如果一个对象 A 继承自另一个对象 B,就把这个 A 称为“B 的子对象”,而把 B 称为“A 的父对象”。 继承可以使得子对象具有父对象的各种属性和方法,而不需要再次编写相同的代码。 在令子对象继承父对象的同时,可以重新定义某些属性,并重写某些方法,即覆盖父对象的原有属性和方法,使其获得与父对象不同的功能。
extends 关键字
在 Java 中,使用 extends 关键字来表达继承的关系,比如:经理这个类继承雇员这个类,示例如下:public class Employee {
String name;
Date hireDate;
Date dateOfBirth;
String jobTitle;
int grade;
...
}
public class Manager extends Employee {
String department;
Employee[] subordinates;
...
}
在这样的定义中,Manager 类被定义,具有 Employee 所拥有的所有变量及方法。所有这些变量和方法都是从父类的定义中继承来的。所有的程序员需要做的是定义额外特征或规定将适用的变化。
注意:这种方法是在维护和可靠性方面的一个伟大进步。如果在 Employee 类中进行修改,那么,Manager 类就会自动修改,而不需要程序员做任何工作,除了对它进行编译。
单继承性
单继承性:当一个类从一个唯一的类继承时,被称做单继承性。单继承性使代码更可靠。接口提供多继承性的好处,而且没有(多继承的)缺点。Java 编程语言允许一个类仅能继承一个其它类,即一个类只能有一个父类。这个限制被称做单继承性。单继承性与多继承性的优点是面向对象程序员之间广泛讨论的话题。Java 编程语言加强了单继承性限制而使代码更为可靠,尽管这样有时会增加程序员的工作。后面会学到一个被叫做接口(interface)的语言特征,它允许多继承性的大部分好处,而不受其缺点的影响。使用继承性的子类的一个例子如图所示:
构造方法不能被继承
尽管一个子类从父类继承所有的方法和变量,但它不继承构造方法,掌握这一点很重要。 一个类能得到构造方法,只有两个办法。或者写构造方法,或者根本没有写构造方法,类有一个默认的构造方法。