C++和Java中继承的比较

简介: 继承的目的在 C++ 和 Java 中是一样的。两种语言都使用继承来重用代码和/或创建“is-a”关系。以下示例将演示 Java 和 C++ 之间提供继承支持的差异。

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战


继承的目的在 C++ 和 Java 中是一样的。两种语言都使用继承来重用代码和/或创建“is-a”关系。以下示例将演示 Java 和 C++ 之间提供继承支持的差异。


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


以下 Java 示例显示 Test 类自动继承自 Object 类。


  • Java
class Test {
  // 测试成员
}
class Main {
public static void main(String[] args) {
  Test t = new Test();
  System.out.println("t 是对象的实例: " + (t instanceof Object));
}
}
复制代码

输出:


t 是对象的实例:true
复制代码

2) 在Java中,祖父类的成员不能直接访问。有关更多详细信息,请参阅此 G-Fact。

 

3) 受保护成员访问说明符的含义在Java中有些不同。在 Java 中,类“A”的受保护成员可以在同一个包的其他类“B”中访问,即使 B 不是从 A 继承的(它们都必须在同一个包中)。


例如,在下面的程序中,A 的受保护成员可以在 B 中访问。


class A {
   protected int x = 10, y = 20;
}
class B {
   public static void main(String args[]) {
    A a = new A();
    System.out.println(a.x + " " + a.y);
   }
}
复制代码

4)  Java 使用extends关键字进行继承。与 C++ 不同,Java 不提供像 public、protected 或 private 这样的继承说明符。因此,我们不能改变 Java 中基类成员的保护级别,如果某个数据成员在基类中是公共的或受保护的,那么它在派生类中仍然是公共的或受保护的。与 C++ 一样,基类的私有成员在派生类中不可访问。

 

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


5) 在 Java 中,方法默认是虚拟的。在 C++ 中,我们明确使用虚拟关键字。有关更多详细信息,请参阅此 G-Fact。


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


下面是一个 Java 抽象类示例。


abstract class myAbstractClass {
abstract void myAbstractFun();
void fun() {
  System.out.println("Inside My fun");
}
}
public class myClass extends myAbstractClass {
public void myAbstractFun() {
  System.out.println("Inside My fun");
}
}
复制代码

下面是一个 Java 接口示例


public interface myInterface {
void myAbstractFun(); 
}
public class myClass implements myInterface {
public void myAbstractFun() {
  System.out.println("Inside My fun");
}
}
复制代码

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


8) 在C++中,会自动调用父类的默认构造函数,但是如果我们要调用父类的参数化构造函数,就必须使用Initializer list。和C++一样,Java中会自动调用父类的默认构造函数,但是如果我们要调用参数化构造函数,那么就必须使用super来调用父构造函数。请参阅


以下 Java 示例。


package main;
class Base {
  private int b;
  Base(int x) {
    b = x;
    System.out.println("调用的基本构造函数");
  }     
}
class Derived extends Base {
  private int d;
  Derived(int x, int y) {
    super(x);
    d = y;
    System.out.println("派生构造函数调用");
  }       
}
class Main{
  public static void main(String[] args) {
  Derived obj = new Derived(1, 2);
  }
}
复制代码


输出:


调用的基本构造函数
派生构造函数调用



目录
相关文章
|
13天前
|
jenkins Shell 测试技术
|
13天前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
70 5
|
13天前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
111 1
|
13天前
|
jenkins Java 持续交付
|
13天前
|
jenkins Java 测试技术
|
4月前
|
算法 Java 数据库连接
Java 与 C++ 区别深入剖析及应用实例详解
本文深入剖析了Java和C++两种编程语言的区别,从编译与执行机制、面向对象特性、数据类型与变量、内存管理、异常处理等方面进行对比,并结合游戏开发、企业级应用开发、操作系统与嵌入式开发等实际场景分析其特点。Java以跨平台性强、自动内存管理著称,适合企业级应用;C++则因高性能和对硬件的直接访问能力,在游戏引擎和嵌入式系统中占据优势。开发者可根据项目需求选择合适语言,提升开发效率与软件质量。附面试资料链接:[点此获取](https://pan.quark.cn/s/4459235fee85)。
306 0
|
4月前
|
存储 安全 Java
c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
91 0
|
7月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
353 6
|
11月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
884 60
|
9月前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
464 15