📜  在Java中使用 super 关键字调用基类构造函数

📅  最后修改于: 2022-05-13 01:54:33.439000             🧑  作者: Mango

在Java中使用 super 关键字调用基类构造函数

我们更喜欢继承来重用现有类中可用的代码。在Java中,继承是一个类继承另一个类的属性的概念。在下面的示例中,有两个类 Programming 和 DP,而 Programming 是父类,DP 是子类。在主类中,我们创建了 DP 的对象,即子类,因为它还允许我们从其父类访问方法,但是如果我们创建父类(编程)的对象,则我们无法从其访问方法或对象它的子类。

创建子类的对象后,我们首先调用子类的方法,然后调用父类的方法。这无关紧要,因为我们可以按任何顺序调用对象。

Java
// Java program to demonstrate inheritance properties
 
class Programming {
   
    // Creating method m1 for class Programming
    public void m1()
    {
      System.out.println("Programming");
    }
}
class DP extends Programming {
   
    // Creating method m2 for class DP
    public void m2()
    {
      System.out.println("DP");
    }
}
public class GFG {
   
    public static void main(String[] args)
    {
        // Creating Obj for Class DP and
        // Calling both m1 from class programming
        // And calling m2 from class DP respectively.
        DP obj = new DP();
        obj.m2();
        obj.m1();
    }
}


Java
// Java program to illustrate
// the concept of Constructor
// inheritance.
 
// Base Class
class Programming {
   
    // Constructor for class Programming
    public Programming()
    {
        System.out.println("Programming");
    }
}
 
// Child Class inherit the Base
// Class
class DP extends Programming {
   
    // Constructor for class DP
    public DP() { System.out.println("DP"); }
}
 
// Main Class
public class GFG {
   
    public static void main(String[] args)
    {
        // Creating obj for
        // class DP
        DP obj = new DP();
    }
}


Java
// Java program to demonstrate
// the concepts of constructor
// overloading.
 
// Base Class
class Programming {
   
    // Creating Constructor for
    // class Programming.
    public Programming()
    {
        System.out.println("Programming");
    }
 
    // Parameterized Constructor
    public Programming(int i, int j)
    {
        System.out.println("Programming + +");
    }
}
 
// Child Class
class DP extends Programming {
   
    public DP()
    {
        // Calling by using
        // Programming(int i,int j)
        // from class Programming.
        super(10, 20);
        System.out.println("DP");
    }
 
    // Parameterized Constructor
    // for class DP
    public DP(int i, int j)
    {
        System.out.println("DP + +");
    }
}
 
// Main Class
public class GFG {
    public static void main(String[] args)
    {
        // Creating Object for class DP.
        DP obj = new DP();
    }
}


Java
// Base Class
class Programming {
   
    // Default Constructor
    public Programming()
    {
        System.out.println("Programming");
    }
 
    // parameterized Constructor
    public Programming(int i, int j)
    {
        System.out.println("Programming + +");
    }
}
class DP extends Programming {
   
    public DP() { System.out.println("DP"); }
 
    // parameterized Constructor with
    // one parameter
    public DP(int i) { System.out.println("DP +"); }
 
    // parameterized Constructor with
    // two parameter i and j.
    public DP(int i, int j)
    {
        System.out.println("DP + +");
    }
}
 
// Main Class
public class GFG {
   
    public static void main(String[] args)
    {
 
        // Creating obj for DP
        // class which inherits the
        // properties of class programming
        DP obj = new DP(10);
    }
}



输出 :

DP
Programming

构造函数继承

在下面的示例中,我们创建了一个父类和子类。在这里,我们已经创建了一个子类的对象,因为构造函数会在创建对象时调用自己,我们无需提及任何内容。

创建子类的对象后,构造函数应该打印自己类的输出,但是从输出中,我们可以确定父类被执行,然后子类被执行,这是因为我们为继承创建了一个构造函数默认情况下,每个类都包含一个 super(),因为我们正在调用一个继承类,它在第一行包含 super() 并调用 Parent 类。

Java

// Java program to illustrate
// the concept of Constructor
// inheritance.
 
// Base Class
class Programming {
   
    // Constructor for class Programming
    public Programming()
    {
        System.out.println("Programming");
    }
}
 
// Child Class inherit the Base
// Class
class DP extends Programming {
   
    // Constructor for class DP
    public DP() { System.out.println("DP"); }
}
 
// Main Class
public class GFG {
   
    public static void main(String[] args)
    {
        // Creating obj for
        // class DP
        DP obj = new DP();
    }
}


输出
Programming
DP

构造函数重载与 Super

在下面的示例中,我们使用了构造函数重载的概念,并且我们创建了一个子类的对象,在调用子类的构造函数后,其中的第一行是 super(10, 20),表示从父类,如果我们不提及该行,默认情况下它会调用 super() ,而父类没有参数化构造函数。

Java

// Java program to demonstrate
// the concepts of constructor
// overloading.
 
// Base Class
class Programming {
   
    // Creating Constructor for
    // class Programming.
    public Programming()
    {
        System.out.println("Programming");
    }
 
    // Parameterized Constructor
    public Programming(int i, int j)
    {
        System.out.println("Programming + +");
    }
}
 
// Child Class
class DP extends Programming {
   
    public DP()
    {
        // Calling by using
        // Programming(int i,int j)
        // from class Programming.
        super(10, 20);
        System.out.println("DP");
    }
 
    // Parameterized Constructor
    // for class DP
    public DP(int i, int j)
    {
        System.out.println("DP + +");
    }
}
 
// Main Class
public class GFG {
    public static void main(String[] args)
    {
        // Creating Object for class DP.
        DP obj = new DP();
    }
}


输出:

Programming + +
DP

比喻

让我们看看下面的片段,

  • 在下面的代码中,我们创建了一个子类的对象,我们从对象行本身传递了 10 的值,在转到特定的构造函数之后,它首先默认调用 super() 并从父类打印“Programming”班级。
  • 需要注意的一点是,我们从对象创建行调用参数化构造函数,但默认情况下它将调用 super(),因为默认情况下可用。
  • 在子类中,我们还可以给 super() 提供参数,以从父类调用特定的构造函数。

Java

// Base Class
class Programming {
   
    // Default Constructor
    public Programming()
    {
        System.out.println("Programming");
    }
 
    // parameterized Constructor
    public Programming(int i, int j)
    {
        System.out.println("Programming + +");
    }
}
class DP extends Programming {
   
    public DP() { System.out.println("DP"); }
 
    // parameterized Constructor with
    // one parameter
    public DP(int i) { System.out.println("DP +"); }
 
    // parameterized Constructor with
    // two parameter i and j.
    public DP(int i, int j)
    {
        System.out.println("DP + +");
    }
}
 
// Main Class
public class GFG {
   
    public static void main(String[] args)
    {
 
        // Creating obj for DP
        // class which inherits the
        // properties of class programming
        DP obj = new DP(10);
    }
}


输出 :

Programming
DP +