Java程序演示父类默认构造函数对子类的默认可用性


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

在深入探讨主题之前,让我们先了解一下**构造函数**、**父类**和**子类**的概念。

构造函数

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

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

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

  • 默认构造函数。

  • 参数化构造函数。

  • 复制构造函数。

这里,我们只讨论默认构造函数。

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

父类和子类

作为派生类基础的类称为父类,而从基类派生或继承的类称为子类。它通过`extend`关键字继承。

示例

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

// Java Program to demonstrate the Availability of Default
import java.io.*;
// creation of parent class named A
class A {
   // default constructor of class A
   A () {
      System.out.println(
         "This is a default constructor of class A");
   }
}
// creation of a child class named B and inheriting parent class A to the
// child class B
class B extends A {
   // default constructor of child class B
   B () {
      System.out.println(
         "This is a default constructor of class B");
   }
}
public class TutorialsPoint1 {
   public static void main (String [] args) {
      // creation of an object of parent class A that will
      // only invoke the default constructor of the parent class
      A o1 = new A ();
      // creation of an object of child class B that will
      // invoke a constructor of parent class A first and then
      // the constructor of the child class
      B o2 = new B ();
   }
} 

输出

This is a default constructor of class A
This is a default constructor of class A
This is a default constructor of class B

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

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

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

示例

在下面的Java程序中,演示了构造函数链的概念。它展示了当创建子类对象时,子类构造函数如何自动调用父类构造函数。它还展示了父类构造函数如何以从上到下的层次结构方式被调用。

// Java Program to demonstrate the Availability of Default
// Constructor of the Super Class to the Sub Class by
// Default
import java.util.*;
class A {
   // default constructor of the class named A
	A() { System.out.println("\n This is a default constructor of class A "); }
}
class B extends A {
   // default constructor of the class named B
	B() { System.out.println("\n This is a default constructor of class B "); }
}
class C extends B {
   // default constructor of the class named C
	C() { System.out.println("\n This is a default constructor of class C "); }
}
public class TutorialsPoint2{
	public static void main(String[] args){
	   // creation of an object of class C
		// that will invoke the constructor of C
		// but before invoking the constructor of class C
		// the constructor of its parent
		// class which is B will get invoked but C is a child of class A Thus,
		// before invoking the constructor of class B, the constructor of the 
		// class A that is the parent of
		// class B shall get invoked
		C o = new C ();
	}
}

输出

This is a default constructor of class A 
This is a default constructor of class B 
This is a default constructor of class C 

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

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

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

示例

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

// Java Program to demonstrate the Availability of DefaultvConstructor of the Super Class to the Sub Class by Default
import java.util.*;
class A {
   // default constructor of a class named A
	A () { System.out.println("This is a default constructor of class A "); }
}
class B extends A {
	// default constructor of a class named B
	B ()	{
	   // java compiler invokes keyword super () by
		// default in the case of the default constructor
		super ();
		System.out.println("This is a default constructor of class B ");
	}
}
class C extends B {
	// default constructor of a class named C
	C (){
		//  java compiler invokes the keyword super()  by
		// default in the case of the default constructor
		super ();
		System.out.println("This is a default constructor of class C ");
	}
}
public class TutorialsPoint3 {
	public static void main(String[] args){
	   // creation of an object of class C
		// that will invoke the constructor of C
		// but before invoking the constructor of class C
		// the constructor of its parent
		// class shall be invoked which is B but B is a child of A class so,
		// before invoking the constructor of the B class, it
		// will invoke the constructor of A class that is the parent of
		// class B
		C obj = new C ();
	}
}

输出

This is a default constructor of class A 
This is a default constructor of class B 
This is a default constructor of class C 

在上面的程序中,定义了三个类,即**A**、**B**和**C**。

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

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

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

结论

本文阐述了演示父类默认构造函数对子类默认可用性的方法。

讨论从**构造函数**、**父类**和**子类**的概念开始。此外,还讨论了在Java中执行上述操作的三种方法及其实现。

更新于:2023年8月11日

93 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告