Java的方法、構造器重載

1、方法重載

java中運行同一個類裏,定義多個同名方法,只要形參列表不同即可。

規則:兩同一不同(無其他要求,比如返回值、修飾符等均可相同或不同)

  • 同一個類中
  • 方法名相同
  • 形參列表不同(形參個數不同、形參類型不同)
public class t {
	public void test() {
		System.out.println("無參方法");
	}
	private void test(int n) {
		System.out.println("有一個參數的方法:"+n);
	}
	private void test(String str) {
		System.out.println("有一個參數的方法:"+str);
	}
	public static void main(String[] args) {
		t op=new t();
		op.test(); //調用無參test()方法
		op.test(32);  //調用有一個參數且參數類型爲int的test()方法
		op.test("hello world"); //調用有一個參數且參數類型爲String的test()方法
	}
}

第一個test與後兩個相比,是形參個數不同

第二個test和第三個test,是形參類型不同

2、構造器重載

同一個類中具有多個構造器,構造器的名字相同,但形參列表不同

class Person{
	int age;
	char sex;
	String name;
	public Person(){}  //無參構造器
	//類型爲int的一個形參的構造器
	public Person(int age){
		this.age=age;
	}
	//類型爲char的一個形參的構造器
	public Person(char sex) {
		this.sex=sex;
	}
	//類型爲String的三個形參的構造器
	public Person(int age,char sex,String name) {
		this.age=age;
		this.sex=sex;
		this.name=name;
	}
	public void info() {
		System.out.println("我的名字是:"+name+",我的年齡是:"+age+",我的性別是:"+sex);
	}
}
public class t {
	public static void main(String[] args) {
		Person zhang=new Person();  //調用無參構造器
		Person le=new Person(23);  //調用int型的構造器
		Person zhou=new Person('男'); //調用String型的構造器
		Person chen=new Person(24,'女',"陳孝");
		zhang.info();
		le.info();
		zhou.info();
		chen.info();
	}
}

輸出結果:我的名字是:null,我的年齡是:0,我的性別是:

​ 我的名字是:null,我的年齡是:23,我的性別是:

​ 我的名字是:null,我的年齡是:0,我的性別是:男

​ 我的名字是:陳孝,我的年齡是:24,我的性別是:女

系統會根據創建對象時候的形參個數與類型來自動使用相應的構造器。

如果一個構造器B中包含了另外一個構造器A的全部部分,則可以在B中使用this來調用構造器A
class Person{
	int age;
	char sex;
	String name;
	//兩參構造器
	public Person(int age,char sex){
		this.age=age;
		this.sex=sex;
	}
	//三參的構造器
	public Person(int age,char sex,String name) {
		this(age, sex);  //通過this調用兩參構造器
		this.name=name;
	}
	public void info() {
		System.out.println("我的名字是:"+name+",我的年齡是:"+age+",我的性別是:"+sex);
	}
}
public class t {
	public static void main(String[] args) {
		Person le=new Person(25,'女',"陳孝");  
		le.info();
	}
}

注意:this調用另一個構造器的語句必須放在該構造器的首句。因此這也限定了一個構造器中只能有一個this語句。

class Person{
	int age;
	char sex;
	String name;
	public Person(){}  //無參構造器
	//類型爲int的一個形參的構造器
	public Person(int age){
		this.age=age;
	}
	//類型爲char的一個形參的構造器
	public Person(char sex) {
		this.sex=sex;
	}
	//類型爲String的三個形參的構造器
	public Person(int age,char sex,String name) {
		this(age); //調用類型爲int的一個形參的構造器
		this.sex=sex; //此處不可用寫成this(sex)了
		this.name=name;
	}
	public void info() {
		System.out.println("我的名字是:"+name+",我的年齡是:"+age+",我的性別是:"+sex);
	}
}
public class t {
	public static void main(String[] args) {
		Person zhang=new Person();  //調用無參構造器
		Person le=new Person(23);  //調用int型的構造器
		Person zhou=new Person('男'); //調用String型的構造器
		Person chen=new Person(24,'女',"陳孝");
		zhang.info();
		le.info();
		zhou.info();
		chen.info();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章