Java vs Cpp

ItemsJavacpp
面向对象 (封装/继承/多态)
方法重载
指针 (直接访问内存)
类多继承✖(接口替代)
操作符重载✔(复杂 ++)
内存管理垃圾回收机制 (GC) / 内存安全
  • 虚函数 description: 为了多态
    • Java 没有虚函数的概念 Java 普通函数 == C++ 虚函数
      • 动态绑定是 Java 的默认行为
      • 如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数
  • 抽象函数(纯虚函数) description: 为了定义接口
        virtual void print() = 0;
  abstract void print();
  • 抽象类 description: “父类中既包括子类共性函数的具体定义,也包括需要子类各自实现的函数接口”
    • C++ 中抽象类只需要包括纯虚函数,既是一个抽象类。如果仅仅包括虚函数,不能定义为抽象类,因为类中其实没有抽象的概念。
    • Java 抽象类是用 abstract 修饰声明的类。
  • 接口 description: “为了形成一种规约, 不能有 普通成员变量 + 非纯虚函数”
    • C++ 中接口其实就是全虚基类。
    • Java 中接口是用 interface 修饰的类。
  • 小结
    • C++ 虚函数 == Java 普通函数
    • C++ 纯虚函数 == Java 抽象函数
    • C++ 抽象类 == Java 抽象类
    • C++ 虚基类 == Java 接口
  • JAVA – 虚函数、抽象函数、抽象类、接口