# 继承

> 原文： [https://javabeginnerstutorial.com/core-java-tutorial/inheritance/](https://javabeginnerstutorial.com/core-java-tutorial/inheritance/)

Java 继承定义了超类及其子类之间的 is-a 关系。 这意味着只要可以使用超类的对象，就可以使用子类的对象。 Java 中的类继承用于从现有类构建新的类。 继承关系是可传递的：如果类 x 扩展了类 y，则扩展类 x 的类 z 也将从类 y 继承。

例如，汽车类可以继承通用汽车类的某些属性。 在这里，我们发现基本类是车辆类，子类是更具体的汽车类。 子类必须使用`extends`子句从超类派生，该超类必须写在子类定义的标头中。 子类继承了超类的成员，因此促进了代码重用。 子类本身可以添加其新的行为和属性。 `java.lang.Object`类始终位于任何类继承层次结构的顶部。

使用 Java 类继承是不可能的？

1.  超类的私有成员不被子类继承，并且只能间接访问。
2.  由于构造器和初始化程序块不是类的成员，因此它们不会被子类继承。
3.  子类只能扩展一个超类
4.  在超类中具有默认可访问性的成员也不会被其他包中的子类继承，因为这些成员只能通过其与超类在同一包中的子类中的简单名称进行访问。

`this`和`super`关键字：

这两个关键字`super`和`this`帮助您显式命名所需的字段或方法。 使用此关键字和超级关键字，您可以完全控制是否要调用同一类中的方法或字段，还是要从直接父类中调用。 `this`关键字用作对作为当前类实例的当前对象的引用。 `super`关键字还引用当前的对象，但作为当前类的超类的实例。

`this`关键字引用当前对象，在局部变量隐藏或覆盖相同名称的字段的情况下很有用。 如果某个方法需要将当前对象传递给另一个方法，则可以使用此引用进行传递。 注意，该引用不能在静态上下文中使用，因为在任何对象的上下文中都不会执行静态代码。

## Java 继承备忘单

*   父类的所有**公开变量**将由子类继承。
*   所有子类将仅继承*同一包中的所有默认变量*。 包之外的子类将不会继承任何默认成员。
*   **私有成员**无法由子类继承，因为它们对子类不可见，因此，子类可以使用相同的名称创建方法或属性，而不会出现任何问题。
*   所有子类都将继承*同一包或外部包*（**与默认设置不同**）中的受保护变量。
*   未继承的方法**不能被覆盖**。 因此，覆盖的规则无法应用于这些方法。 但是方法仍然可以在子类中定义，尽管这些方法将不会被覆盖。 相反，它代表一个新的方法。
*   静态方法或变量不参与继承。
*   即使静态方法或变量不参与继承且不能被覆盖，也可以在子类中重新定义它们。 重新定义不称为覆盖，而是隐藏。

<https://www.youtube.com/embed/Oykbi03ipZs?start=1&amp;feature=oembed>

