方法的名字和參数列表成为方法的签名。注意,方法签名不包含方法的返回类型。本文通过測试理解參数列表的真正含义,以及在继承中重写方法时方法的返回值与父类中方法的返回值应该有如何的关系。
这里有三个辅助类:
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(); } }