C++ 与 JAVA 的继承区别

2024年8月28日 | 阅读 4 分钟

在 C++ 和 Java 中,继承的目的都是相同的。在这两种语言中,继承都用于代码复用和/或创建“is-a”关系。以下示例将展示 Java 和 C++ 在继承支持方面的差异。

1) 在 Java 中,所有类都直接或间接继承自 Object 类。因此,在 Java 中,始终存在一个单一的类继承树,其中 Object 类是根。当你在 Java 中创建一个类时,它会自动继承自 Object 类。然而,在 C++ 中,存在一个类森林;当我们创建一个不继承自其他类的类时,我们正在森林中创建一棵新树。

如 Java 示例所示,Test 类默认继承自 Object 类。

Java

输出

t is instanceof Object: true

2) 在 Java 中,祖父类成员无法直接访问。(更多信息,请参阅此文章。)

3) 在 Java 中,protected 成员访问修饰符的含义略有不同。即使 B 不继承自 A,类“A”的 protected 成员在同一包中的其他类“B”中也是可访问的(它们都必须在同一个包中)。

例如,在以下程序中,A 的 protected 成员在 B 中是可访问的。

Java

输出

10 20

4) 对于继承,Java 使用 'extends' 关键字。与 C++ 不同,Java 缺乏诸如 public、protected 和 private 等继承说明符。因此,在 Java 中,我们无法更改基类成员的保护级别;如果数据成员在基类中是 public 或 protected,它在派生类中仍将是 public 或 protected。基类的 private 成员在派生类中不可访问,就像在 C++ 中一样。

与 C++ 不同,我们不必记住 Java 中的继承规则,这些规则由基类访问说明符和继承说明符组成。

5) 在 Java 中,虚方法是默认的。我们在 C++ 中明确使用 virtual 关键字(更多详情请参阅此文章)。

6) 对于接口,Java 使用 interface 关键字,而 abstract 关键字用于抽象类和抽象函数。

这是一个 Java 抽象类的示例

Java

下面是一个 Java 接口的示例。

Java

7) 与 C++ 不同,Java 不支持多重继承。一个类不能继承自多个其他类。但是,一个类可以实现多个接口。

8) 在 C++ 中,父类的默认函数 Object() { [native code] } 会自动调用,但如果我们想调用父类的带参数函数 Object() { [native code] },我们必须使用初始化列表。在 Java 中,父类的默认函数 Object() { [native code] } 会自动调用,就像在 C++ 中一样,但如果我们想调用带参数的函数 Object() { [native code] },我们必须使用 super 来调用父函数 Object() { [native code] }。请看下面的 Java 示例。

Java

输出

Base constructor called
Derived constructor called