继承类的Java对象创建
在Java中,作为一种面向对象的语言,类中的对象是在构造函数的帮助下创建的。当谈到Java中的继承时,我们基本上是在处理从另一个类派生一个类。现在让我们更深入地理解继承,所以当一个特定的类继承一个类时,我们确实有一个关键字,我们使用它来通过 super 关键字引用父构造函数。
它用作后缀,后跟“。”类中的构造函数/s 中的运算符。父类(超类)的这个属性也早在子类(子类)继承和使用它们之前就被启动了。
Note: It is mandatory that when an object is created, the constructor is for sure called but it is not mandatory when a constructor is called object creation is mandatory.
我们已经在上面看到,当我们创建一个子类的对象时,会调用同一个类的构造函数,如果没有创建则调用默认构造函数,而我们调用超类的构造函数而不通过关键字在子类中创建类的对象。
在继承中,子类获取超类属性。需要注意的重要一点是,当创建子类对象时,不会创建超类对象的单独对象。仅创建具有超类变量的子类对象。这种情况不同于一般假设构造函数调用意味着类的对象被创建,所以我们不能盲目的说,每当一个类的构造函数被执行时,该类的对象是否被创建。
例子:
Java
// Java program to demonstrate that Both Super Class
// and Subclass Constructors Refer to Same Object
// Importing required classes
import java.util.*;
// Class 1
// Super Class
class Fruit {
// Method inside super class
public Fruit() {
// Print statement
System.out.println("Super class constructor");
// Displaying object hashcode of super class
System.out.println("Super class object hashcode :" +
this.hashCode());
System.out.println(this.getClass().getName());
}
}
// Class 2
// Sub class extending above super class
class Apple extends Fruit {
// Method inside sub class
public Apple() {
// Print statement
System.out.println("Subclass constructor invoked");
// Displaying object hashcode of sub class
System.out.println("Sub class object hashcode :" +
this.hashCode());
System.out.println(this.hashCode() + " " +
super.hashCode());
System.out.println(this.getClass().getName() + " " +
super.getClass().getName());
}
}
// Class 3
// Main class
public class GFG {
// Main driver method
public static void main(String[] args) {
// Creating an instance of above class
// inside main() method
Apple myApple = new Apple();
}
}
Super class constructor
Super class object hashcode :1149319664
Apple
Subclass constructor invoked
Sub class object hashcode :1149319664
1149319664 1149319664
Apple Apple
输出说明:我们可以看到超类(水果)对象哈希码和子类(苹果)对象哈希码相同,因此只创建了一个对象。这个对象属于 Apple(子类)类,因为当我们尝试打印创建对象的类的名称时,它正在打印 Apple,它是一个子类。