標籤:java 泛型 繼承
通過例子來看泛型類在繼承中過程中類型變數應該具有怎樣的關係。
首先給出幾個輔助類:
package generic;public class Animal { }
package generic;public class Person extends Animal {private String name;public Person(String name) {super();this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person [name=" + name + "]";}public Integer printAndReturn() {return 1;}}
package generic;public class Student extends Person {private String studentNumber;public Student(String name, String studentNumber) {super(name);this.studentNumber = studentNumber;}public String getStudentNumber() {return studentNumber;}public void setStudentNumber(String studentNumber) {this.studentNumber = studentNumber;}@Overridepublic String toString() {return "Student [studentNumber=" + studentNumber + ", name="+ getName() + "]";}}
package generic;public class Building {private String name;public Building(String name) {super();this.name = name;}}
package generic;/** * @version 1.00 2004-05-10 * @author Cay Horstmann */public class Pair<T extends Person> { private T first; private T second; public Pair() { first = null; second = null; } public Pair(T first, T second) { this.first = first; this.second = second; } public T getFirst() { return first; } public T getSecond() { return second; } public void setFirst(T newValue) { first = newValue; } public void setSecond(T newValue) { second = newValue; } }
1.子類的類型變數表示的範圍必須與父類一樣或者是父類的子集
package generic;public class PariSon<T extends Person> extends Pair<T> {}
或
public class PariSon<T extends Student> extends Pair<T> {}
2.當父類用具體類型代替類型變數時,具體變數必須是類型變數表示的範圍內的一個元素
package generic;public class PariSon extends Pair<Person> {}
或
package generic;public class PariSon extends Pair<Student> {}
Java泛型 繼承中類型變數的關係