Java 程序说明默认情况下超类的默认构造函数对子类的可用性
在这里,我们将通过 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 的默认构造函数
在上面的程序中,定义了三个类,分别是 A、B 和 C。
类 A 有一个默认构造函数,在调用时只显示一条消息。类 B 扩展了 A,并有自己的默认构造函数,该构造函数首先通过 super () 关键字 调用其父类 A 的构造函数,然后显示自己的消息。类 C 扩展了 B,并有自己的默认构造函数,该构造函数首先使用 super () 关键字调用其父类 B 的构造函数,然后显示自己的消息。
在程序的 main 方法中,创建了类 C 的对象。当调用类 C 的构造函数时,它首先使用 super () 关键字调用其直接父类 B 的构造函数来显示其消息,后者又使用 super () 关键字调用类 A 的构造函数来显示其消息。
最后,调用类 C 本身的构造函数来显示其消息。
结论
本文阐明了方法,以证明超类的默认构造函数默认可用于子类。
讨论从术语构造函数、超类和子类开始。此外,讨论了执行所述操作的三种方法及其在 Java 中的实现。