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);
  }
}
复制代码


输出:


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



目录
相关文章
WK
|
29天前
|
安全 Java 编译器
C++和Java哪个更好用
C++和Java各具优势,选择取决于项目需求、开发者偏好及目标平台特性。C++性能出色,适合游戏、实时系统等;Java平台独立性强,适合跨平台、安全敏感应用。C++提供硬件访问和灵活编程范式,Java有自动内存管理和丰富库支持。两者各有千秋,需根据具体需求选择。
WK
18 1
|
2月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
24 5
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
20 3
|
2月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
37 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
31 2
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
36 1
|
2月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
40 2
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
24 5
|
2月前
|
Java
java继承和多态详解
java继承和多态详解
43 5
WK
|
29天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
47 0