方法的名字和参数列表成为方法的签名。注意,方法签名不包括方法的返回类型。本文通过测试理解参数列表的真正含义,以及在继承中重写方法时方法的返回值与父类中方法的返回值应该有怎样的关系。
这里有三个辅助类:
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(); } }
原文地址:http://blog.csdn.net/l294265421/article/details/46373023