構造方法


構造方法

其實在寫好一個自定義的類時,這個類本身就有一個默認的空參數構造方法,只是不用自己去寫出來,但是在有些時候,需要對它的成員變量在創建對象的時候就進行初始化值,這時就需要重寫構造方法,也就是構造器。

構造方法的作用就是對成員變量進行默認初始化值。

構造方法的定義格式

修飾符 方法名(參數列表){

}

修飾符:也就是它的權限問題

方法名:定義必須和類名完全一致

參數列表:如果需要對成員變量在創建對象的時候就進行賦值,就寫參數,如果不需要,不需要寫參數列表。

構造方法在創建對象的時候就運行了,具體代碼演示如下:

l  Person

package cn.itcast.ConstructorMethod;
/*
 * 構造方法的創建
 */
public class Person {
   //定義姓名,年齡,將其私有化
   private String name;
   private int age;
   
   //構造方法,實驗這個構造方法是在什麼時候被運行的
   public Person(){
      System.out.println("我是一個空參數的構造方法");
   }
   //get方法set方法
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   
}


l  測試類

package cn.itcast.ConstructorMethod;
/*
 * 測試構造方法是在什麼時候被運行的
 */
public class Test {
   public static void main(String[] args) {
      //創建Person類對象
      Person p = new Person();
   }
}


運行結果:image.png

在創建對象的時候就對成員變量進行初始化值,具體的代碼演示如下:

l  PersonName

package cn.itcast.ConstructorMethod;
/*
 * 創建構造方法
 */
public class PersonName {
   //定義姓名
   private String name;
   //重寫構造方法,對其傳入有參的參數,也就是姓名
   public PersonName(String name){
      this.name = name;
   }
   //get方法set方法
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   
}


l  測試類

package cn.itcast.ConstructorMethod;
/*
 * 測試構造方法是否在創建對象時初始化姓名值
 */
public class TestName {
   public static void main(String[] args) {
      //創建PersonName類的對象,對構造方法初始化值,其實就是在調用這個構造方法
      PersonName pm = new PersonName("王傑");
      //查看一下是否在創建對象時對姓名進行初始化值
      System.out.println(pm.getName());
   }
}


構造方法的重載

類中的構造方法可以有重載,只要其參數列表不同即可,下面用一段代碼來演示構造方法的重載:

l  Person

package cn.itcast.ConstructorMethodOverLoad;
/*
 * 構造方法的重載
 */
public class Person {
   //定義姓名,年齡
   private String name;
   private int age;
   //構造方法的重載,空參構造方法
   public Person(){
      
   }
   //構造方法的重載,有參構造方法
   public Person(String name,int age){
      this.name = name;
      this.age = age; 
   }
   //get方法set方法
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   
}


l  測試類

package cn.itcast.ConstructorMethodOverLoad;
/*
 * 測試構造方法的重載
 */
public class Test {
   public static void main(String[] args) {
      //創建Person類對象,調用空參構造方法
      Person p = new Person();
      p.setName("張三");
      p.setAge(18);
      System.out.println(p.getName());
      System.out.println(p.getAge());
      //創建對象,調用有參的構造方法
      Person p2 = new Person("李四", 19);
      System.out.println(p2.getName());
      System.out.println(p2.getAge());
   }
}


運行結果:image.png

構造方法和一般方法的區別:

構造方法在創建對象的時候就被調用了,並且只能執行一次,而一般方法在創建對象後,需要被使用纔會被對象所進行調用,一般方法可以被調用多次。

構造方法中this的作用

構造方法中this的作用就是將兩個構造方法進行連接,在一個空參構造方法中通過this的方式對成員進行賦值,可以和有參的構造方法進行聯繫,調用有參的構造方法,傳遞實際參數,具體的使用細節如下:

注意,this的使用必須寫在構造方法中的第一行。

l  Person

package cn.itcast.This;
/*
 * 構造方法中this 的用法
 */
public class Person {
   //定義姓名,年齡
   private String name;
   private int age;
   //空參構造方法
   public Person(){
      this("張三",20);
   }
   //有參構造方法
   public Person(String name,int age){
      this.name = name;
      this.age = age;
   }
   //get方法和set方法
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   
}


l  測試類

package cn.itcast.This;
/*
 * 測試類,測試構造方法中this的用法
 */
public class Test {
   public static void main(String[] args) {
      //創建對象,調用空參構造方法
      Person p = new Person();
      System.out.println(p.getName());
      System.out.println(p.getAge());
   }
}


構造方法中super關鍵字的用法

在子類中,可以使用super去調用父類的構造方法

super()調用的是父類空參數的構造方法

super(參數)調用的是父類中有參數的構造方法

注意:super必須寫在構造方法中的第一行,superthis,兩者有一個就可以了,如果子類繼承父類,子類都必須直接或間接訪問父類的構造方法。代碼演示如下:

l  人類

package cn.itcast.ConstructorMethodSuper;
/*
 * 父類構造方法
 */
public class Person {
   public Person(int a){
      
   }
}


l  學生類

package cn.itcast.ConstructorMethodSuper;
/*
 * 子類繼承父類
 * 子類構造方法直接或間接訪問父類構造方法
 */
public class Student extends Person{
   public Student(){
      this(5);//調用本類構造方法,參數爲int的構造方法
   }
   public Student(int a){
      super(4);//調用父類的構造方法
   }
}


super的實例演示

l  Person

package cn.itcast.ConstructorMethodSuper實例;
/*
 * 需求:有學生和工人兩個類,有其共有的屬性name和age,要求在創建這兩個對象時就對name和age賦值
 * Person父類,學生和工人抽取的共有內容
 * 成員變量私有,重寫構造方法,接收傳遞變量的值
 * get,set方法用於獲取私有變量的值
 */
public class Person {
   //私有變量name,age
   private String name;
   private int age;
   //重寫構造方法
   public Person(String name,int age){
      this.name = name;
      this.age = age;
   }
   //get,set方法
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
   
}


l  Student

package cn.itcast.ConstructorMethodSuper實例;
/*
 * 學生類,繼承Person類,重寫構造方法,將創建學生對象後賦的值傳遞給父類的構造方法
 */
public class Student extends Person{
   //重寫構造方法,創建Student對象時直接賦值name,age
   public Student(String name,int age){
      //將值傳遞給父類的構造方法
      super(name,age);
   }
}


l  Worker

package cn.itcast.ConstructorMethodSuper實例;
/*
 * 工人類,繼承Person類,重寫構造方法,將值傳遞給父類的構造方法中
 */
public class Worker extends Person{
   //重寫構造方法,創建Worker對象時直接賦值name,age
   public Worker(String name,int age){
      //將值傳遞給父類構造方法
      super(name, age);
   }
}


l  Test測試類

package cn.itcast.ConstructorMethodSuper實例;
/*
 * 測試類
 * 創建學生,工人對象時就對name,age賦值,獲取name,age的值
 */
public class Test {
   public static void main(String[] args) {
      //創建Student對象並賦值
      Student s = new Student("張三",30);
      //獲取name,age的值
      System.out.println(s.getName());
      System.out.println(s.getAge());
      //創建Worker對象並賦值
      Worker w = new Worker("李四",20);
      System.out.println(w.getName());
      System.out.println(w.getAge());
   }
}

運行結果:super實例.jpg

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章