国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

App下載

Java類(lèi)的繼承與構(gòu)造函數(shù):你需要知道的一切

勇敢的小蘿卜 2023-06-27 11:40:37 瀏覽數(shù) (2972)
反饋

Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它支持類(lèi)的繼承,即一個(gè)類(lèi)可以從另一個(gè)類(lèi)繼承屬性和方法。繼承可以提高代碼的復(fù)用性和可擴(kuò)展性,但也帶來(lái)了一些問(wèn)題,比如構(gòu)造函數(shù)的繼承。

構(gòu)造函數(shù)是一種特殊的方法,它用于創(chuàng)建類(lèi)的實(shí)例,并初始化類(lèi)的屬性。構(gòu)造函數(shù)的名字必須和類(lèi)名相同,而且沒(méi)有返回值。構(gòu)造函數(shù)可以有參數(shù),也可以沒(méi)有參數(shù),但不能被繼承。

那么,如果一個(gè)類(lèi)繼承了另一個(gè)類(lèi),它的構(gòu)造函數(shù)會(huì)怎樣呢?答案是,子類(lèi)必須顯式地調(diào)用父類(lèi)的構(gòu)造函數(shù),否則會(huì)報(bào)錯(cuò)。這是因?yàn)樽宇?lèi)需要先初始化父類(lèi)的屬性,然后再初始化自己的屬性。如果不調(diào)用父類(lèi)的構(gòu)造函數(shù),父類(lèi)的屬性就沒(méi)有被賦值,導(dǎo)致程序出錯(cuò)。

子類(lèi)調(diào)用父類(lèi)的構(gòu)造函數(shù)有兩種方式:一種是使用super關(guān)鍵字,在子類(lèi)的構(gòu)造函數(shù)中第一行寫(xiě)上super();或者super(參數(shù));來(lái)調(diào)用父類(lèi)的無(wú)參或有參構(gòu)造函數(shù)。另一種是使用this關(guān)鍵字,在子類(lèi)的構(gòu)造函數(shù)中第一行寫(xiě)上this(參數(shù));來(lái)調(diào)用子類(lèi)自己的其他構(gòu)造函數(shù),而那個(gè)構(gòu)造函數(shù)再調(diào)用父類(lèi)的構(gòu)造函數(shù)。

下面是一個(gè)簡(jiǎn)單的例子:

//定義一個(gè)父類(lèi)Person
class Person {
  String name;
  int age;
  //定義一個(gè)無(wú)參構(gòu)造函數(shù)
  Person() {
    System.out.println("Person無(wú)參構(gòu)造函數(shù)被調(diào)用");
  }
  //定義一個(gè)有參構(gòu)造函數(shù)
  Person(String name, int age) {
    this.name = name;
    this.age = age;
    System.out.println("Person有參構(gòu)造函數(shù)被調(diào)用");
  }
}
//定義一個(gè)子類(lèi)Student,繼承自Person
class Student extends Person {
  String school;
  //定義一個(gè)無(wú)參構(gòu)造函數(shù)
  Student() {
    super(); //調(diào)用父類(lèi)的無(wú)參構(gòu)造函數(shù)
    System.out.println("Student無(wú)參構(gòu)造函數(shù)被調(diào)用");
  }
  //定義一個(gè)有參構(gòu)造函數(shù)
  Student(String name, int age, String school) {
    this(name, age); //調(diào)用本類(lèi)的另一個(gè)有參構(gòu)造函數(shù)
    this.school = school;
    System.out.println("Student有參構(gòu)造函數(shù)被調(diào)用");
  }
  //定義另一個(gè)有參構(gòu)造函數(shù)
  Student(String name, int age) {
    super(name, age); //調(diào)用父類(lèi)的有參構(gòu)造函數(shù)
    System.out.println("Student另一個(gè)有參構(gòu)造函數(shù)被調(diào)用");
  }
}
//在主方法中創(chuàng)建子類(lèi)對(duì)象并測(cè)試
public class Test {
  public static void main(String[] args) {
    Student s1 = new Student(); //創(chuàng)建一個(gè)無(wú)參對(duì)象
    Student s2 = new Student("張三",18,"清華大學(xué)"); //創(chuàng)建一個(gè)有參對(duì)象
  }
}

運(yùn)行結(jié)果如下:

Person無(wú)參構(gòu)造函數(shù)被調(diào)用
Student無(wú)參構(gòu)造函數(shù)被調(diào)用
Person有參構(gòu)造函數(shù)被調(diào)用
Student另一個(gè)有參構(gòu)造函數(shù)被調(diào)用
Student有參構(gòu)造函數(shù)被調(diào)用

從結(jié)果可以看出,每次創(chuàng)建子類(lèi)對(duì)象時(shí),都會(huì)先調(diào)用父類(lèi)的構(gòu)造函數(shù),然后再調(diào)用子類(lèi)的構(gòu)造函數(shù)。這樣可以保證父類(lèi)和子類(lèi)的屬性都被正確地初始化。

總結(jié)一下,Java中的類(lèi)在繼承時(shí)不會(huì)繼承父類(lèi)的構(gòu)造函數(shù),但必須顯式地調(diào)用父類(lèi)的構(gòu)造函數(shù)來(lái)初始化父類(lèi)的屬性。子類(lèi)可以使用super或this關(guān)鍵字來(lái)調(diào)用父類(lèi)或本類(lèi)的構(gòu)造函數(shù),但必須放在子類(lèi)構(gòu)造函數(shù)的第一行。這樣可以實(shí)現(xiàn)類(lèi)的繼承與構(gòu)造函數(shù)的協(xié)調(diào)。

java相關(guān)課程推薦:java相關(guān)課程

0 人點(diǎn)贊