方法的名字和參數列表成為方法的簽名。注意,方法簽名不包含方法的返回類型。本文通過測試理解參數列表的真正含義,以及在繼承中重寫方法時方法的返回值與父類中方法的返回值應該有如何的關系。
這里有三個輔助類:
package methodsign;
public class Ancestor {
}
package methodsign;
public class Parent extends Ancestor {
}
package methodsign;
public class Other {
}
以下是測試類。測試結果在凝視中說明:
package methodsign;
/**
* 測試方法簽名
* 方法的名字和參數列表稱為方法的簽名
* @author yuncong
*
*/
public class Person {
private String name;
private String gender;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
/**
* 由構造器1和構造器2不可同一時候存在可知。方法簽名的參數列表詳細是指參數的類型列表。
* 由構造器1和構造器3能夠同一時候存在可知,方法簽名的參數類型列表還與參數類型的順序有關,也就是說,
* 即使方法括號里的參數個數和類型全然一樣,僅僅要參數類型的順序不同,也是不同的參數類型列表
*/
// 構造器1
public Person(String name, String gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
// 構造器2
public Person(String gender, String name, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
// 構造器3
public Person(String name, int age, String gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
public Ancestor getAncestor() {
return new Ancestor();
}
}
package methodsign;
public class Student extends Person {
/**
* 方法1是正確的,方法2是錯誤的,說明在子類中重寫父類的方法。方法的返回值
* 必須與父類中該方法的返回值一樣或者是父類中該方法返回值的子類
*/
// 方法1
public Parent getAncestor() {
return new Parent();
}
// 方法2
public Other getAncestor() {
return new Other();
}
}
