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中执行上述操作的三种方法及其实现。