📜  借助代码显示 this() 和 super() 之间的区别 - Java (1)

📅  最后修改于: 2023-12-03 15:07:02.157000             🧑  作者: Mango

借助代码显示 this() 和 super() 之间的区别 - Java

在 Java 中,我们可以使用 this()super() 来调用当前类或父类的构造方法。本文将着重讲解二者的区别。

this()

this() 是一个指向类的当前实例的指针。它可以用来引用当前对象的方法、属性和构造函数。使用 this() 调用当前类的构造函数时,需要注意以下几点:

  • this() 必须放在构造函数的第一行;
  • 不能同时调用多个 this()
  • 如果构造函数中没有显式调用 this()super(),Java 会自动调用无参的父类构造函数。

下面是一个含有 this() 的示例代码:

class Person {
    String name; 
    int age; 
    
    Person(String name, int age) {
        this.name = name; 
        this.age = age; 
    }
    
    Person() {
        this("Tom", 20); 
    }
}

class Employee extends Person {
    String id; 
    
    Employee(String name, int age, String id) {
        super(name, age); 
        this.id = id; 
    }
    
    Employee() {
        this("Jerry", 30, "001"); 
    }
}

上述代码中,Person 类含有一个含参构造函数和一个无参构造函数。Employee 类继承了 Person 类,并含有一个含参构造函数和一个无参构造函数。当我们使用 new Employee() 创建一个对象时,会自动调用无参的构造函数。

super()

super() 是一个指向父类的指针,用来引用父类的方法、属性和构造函数。使用 super() 调用父类的构造函数时,也需要注意以下几点:

  • super() 必须放在构造函数的第一行;
  • 如果父类没有无参构造函数,需要显式调用有参构造函数;
  • 如果没有显式调用 super(),Java 会自动调用无参的父类构造函数。

下面是一个含有 super() 的示例代码:

class Animal {
    String name; 
    
    Animal() {
        this.name = "Animal"; 
    }
    
    Animal(String name) {
        this.name = name; 
    }
}

class Dog extends Animal {
    String breed; 
    
    Dog() {
        super(); 
        this.breed = "unknown"; 
    }
    
    Dog(String name, String breed) {
        super(name); 
        this.breed = breed; 
    }
}

上述代码中,Animal 类含有一个无参构造函数和一个含参构造函数。Dog 类继承了 Animal 类,并含有一个无参构造函数和一个含参构造函数。当我们使用 new Dog() 创建一个对象时,会自动调用无参的构造函数。

总结
  • this() 是指向当前对象的指针,用来引用当前对象的方法、属性和构造函数;
  • super() 是指向父类的指针,用来引用父类的方法、属性和构造函数;
  • 当使用 this()super() 调用构造函数时,需要遵守一些规则。

以上就是 this()super() 的区别及用法,希望能对大家有所帮助!