Java 程序说明默认情况下超类的默认构造函数对子类的可用性

javaobject oriented programmingprogramming更新于 2024/8/6 15:28:00

在这里,我们将通过 Java 程序演示默认情况下超类的默认构造函数对子类的可用性。

在深入探讨该主题之前,让我们先熟悉一下构造函数超类子类这些术语。

构造函数

Java 中的一种特殊方法用于初始化对象。构造函数的名称与类名相同,并且不返回任何内容。

每当使用new 关键字创建对象时,都会自行调用默认构造函数。

Java 中有以下三种类型的构造函数

  • 默认构造函数。

  • 参数化构造函数。

  • 复制构造函数。

这里,我们只处理默认构造函数。

默认构造函数没有参数,它根据提供的数据类型使用默认值(如 0、0.0、null 等)初始化数据成员。

超类和子类

作为派生类基础的类称为超类,而从基类派生或继承的类称为子类。它是在 extend 关键字的帮助下继承的。

示例

在下面的 Java 程序中,说明了 Java 中的继承机制以及默认构造函数如何在父类和子类中工作。它还展示了当创建子类的对象时,子类构造函数如何自动调用父类的默认构造函数。

// Java 程序演示默认的可用性
import java.io.*;
// 创建名为 A 的父类
class A {
   // default constructor of class A
   A () {
      System.out.println(
         "This is a default constructor of class A");
   }
}
// 创建一个名为 B 的子类,并将父类 A 继承给
// 子类 B
class B extends A {
   // 子类 B 的默认构造函数
   B () {
      System.out.println(
         "This is a default constructor of class B");
   }
}
public class TutorialsPoint1 {
   public static void main (String [] args) {
    // 创建父类 A 的对象,该对象将
    // 仅调用父类的默认构造函数
    A o1 = new A ();
    // 创建子类 B 的对象,该对象将
    // 首先调用父类 A 的构造函数,然后
    // 调用子类的构造函数
    B o2 = new B ();
   }
} 

输出

这是类 A 的默认构造函数
这是类 A 的默认构造函数
这是类 B 的默认构造函数

在上面的程序中,定义了一个名为 A 的父类,它有一个默认构造函数,在调用时只显示一条消息。

这里还定义了一个名为 B 的子类,它扩展了 A,并有自己的默认构造函数,在调用时也会显示一条消息。

在程序的主方法中,创建了两个对象。第一个对象是通过类 A 的默认构造函数创建的,它只显示父类中定义的消息。第二个对象是使用类 B 的默认构造函数创建的,它首先调用类 A 的构造函数来显示其消息,然后调用类 B 的构造函数来显示其消息。

示例

在下面的 Java 程序中,演示了构造函数链的概念。它显示了一旦创建子类的对象,子类构造函数如何自动调用默认构造函数。它还显示了如何从上到下以分层方式调用父类的构造函数。

// Java 程序演示默认的可用性
// 超类的构造函数通过子类传递给子类
// Default
import java.util.*;
class A {
    // 名为 A 的类的默认构造函数
    A() { System.out.println("\n 这是类 A 的默认构造函数 "); }
}
class B extends A {
    // 名为 B 的类的默认构造函数
    B() { System.out.println("\n 这是类 B 的默认构造函数 "); }
}
class C extends B {
    // 名为 C 的类的默认构造函数
    C() { System.out.println("\n 这是类 C 的默认构造函数 "); }
}
public class TutorialsPoint2{
	public static void main(String[] args){
        // 创建类 C 的对象
        // 将调用 C 的构造函数
        // 但在调用类 C 的构造函数之前
        // 将调用其父类 B 的构造函数,但 C 是类 A 的子类,因此,
        // 在调用类 B 的构造函数之前,将调用类 B 的父类
        // 的构造函数
        C o = new C ();
	}
}

输出

这是类 A 的默认构造函数
这是类 B 的默认构造函数
这是类 C 的默认构造函数

在上面的程序中,定义了三个类,即 A、B 和 C。类 A 有一个默认构造函数,在调用时只显示一条消息。类 B 扩展了 A,并有自己的默认构造函数,在调用时也会显示一条消息。类 C 扩展了 B,并有一个默认构造函数,在调用时会显示一条消息。

在程序的主方法中,创建了类 C 的对象。调用类 C 的构造函数后,它首先调用其直接父类 B 的构造函数来显示其消息,然后调用类 B 的父类 A 的构造函数来显示其消息。

最后,调用类 C 本身的构造函数来显示其消息。

示例

以下 Java 程序演示了 Java 中 super () 关键字的用法,用于调用父类的构造函数,以及构造函数链如何在具有多级继承的类层次结构中工作。super() 关键字可用于调用父类的默认或参数化构造函数。

// Java 程序演示默认超类的 DefaultvConstructor 对子类的可用性
import java.util.*;
class A {
    // 名为 A 的类的默认构造函数
    A () { System.out.println("这是类 A 的默认构造函数 "); }
}
class B extends A {
    // 名为 B 的类的默认构造函数
    B () {
        // java 编译器通过调用关键字 super ()
        // default 在默认构造函数的情况下
        super ();
        System.out.println("这是类 B 的默认构造函数 ");
    }
}
class C extends B {
    // 名为 C 的类的默认构造函数
    C (){
        // java 编译器通过调用关键字 super()
        // default 在默认构造函数的情况下
        super ();
        System.out.println("这是类 C 的默认构造函数 ");
    }
}
public class TutorialsPoint3 {
	public static void main(String[] args){
        // 创建类 C 的对象
        // 将调用 C 的构造函数
        // 但在调用类 C 的构造函数之前
        // 应调用其父类的构造函数,即 B,但 B 是 A 类的子类,因此,
        // 在调用 B 类的构造函数之前,它
        // 将调用 A 类的构造函数,该类是 B 类的父类
        ​​// C obj = new C ();
	}
}

输出

这是类 A 的默认构造函数
这是类 B 的默认构造函数
这是类 C 的默认构造函数

在上面的程序中,定义了三个类,分别是 ABC

类 A 有一个默认构造函数,在调用时只显示一条消息。类 B 扩展了 A,并有自己的默认构造函数,该构造函数首先通过 super () 关键字 调用其父类 A 的构造函数,然后显示自己的消息。类 C 扩展了 B,并有自己的默认构造函数,该构造函数首先使用 super () 关键字调用其父类 B 的构造函数,然后显示自己的消息。

在程序的 main 方法中,创建了类 C 的对象。当调用类 C 的构造函数时,它首先使用 super () 关键字调用其直接父类 B 的构造函数来显示其消息,后者又使用 super () 关键字调用类 A 的构造函数来显示其消息。

最后,调用类 C 本身的构造函数来显示其消息。

结论

本文阐明了方法,以证明超类的默认构造函数默认可用于子类。

讨论从术语构造函数超类子类开始。此外,讨论了执行所述操作的三种方法及其在 Java 中的实现。


相关文章