Java 中的继承可以类比于现实世界中的继承,如:子女从父母继承手艺、财富。具体而言,Java 代码中的子类继承父类,使得父类代码为子类所用,而且继承也是方法覆盖和多态机制的基础。
概念
超类与子类
B 类继承 A 类,则称 A 类为超类(superclass)、父类或基类;B 类则称为子类(subclass)、派生类或扩展类。
Java 中的任何类都默认继承 Object 类,Object类是 Java 语言提供的根类,任何一个对象与生俱来就有 Object 类中所有的特征。
class A{};
class B extends A{};
单继承与多继承
Java 中的继承只支持单继承,不支持多继承,这体现了 Java 的简单性。
// 多继承是错误的
class B extends A,C{
};
虽然 Java 中不支持多继承,但可以产生间接的多继承,如:
class C extends B{};
class B extends A{}; // C 直接继承 B, C 还间接继承 A。
继承后的访问
Java 中规定子类继承父类,构造方法不能继承之外,剩下都可被继承。
但父类中 private 修饰的属性和方法无法在子类中直接访问,需间接访问。
继承的缺点
耦合度高。CreditAccount 类继承 Account 类会导致它们之间的耦合度非常高,Account 类发生改变后会影响到 CreditAccount 类。
何时用继承
凡是能采用 `is a`` 描述的,都可以使用继承。例如:Cat is a Animal(猫是一个动物,Cat 类继承 Animal 类);Credit_Account is a Account(信用卡账户是一个银行账户,Credit_Account 类继承 Account 类)
当两个类中有相同的属性或方法,可以用继承来简化代码。但此时也需要注意是否符合逻辑,如下例所示,产品类不适合继承顾客类
class Customer{
String name; // 名字
// setter and getter
}
class Product extends Customer{}