用户在设计类时往往会使用类的关联关系,例如,一个人中可以定义一个信息的属性,但是一个人可能有各种各样的信息(如联系方式、基本信息等),所以此信息属性的类型就可以通过泛型进行声明,然后只要设计相应的信息类即可
但是需要注意的是,既然需要的是一个信息的类,所以在设计此类时最好做一个信息的表示接口,只要传递的是此接口的子类就可以设置成泛型类型。
- 定义标识接口–信息
interface Info{//定义一个标识接口,此接口没有定义任何方法
}
- 联系方式,此类实现 Info 接口
//联系方式,此类实现 Info 接口
class Contact implements Info{//实现Info接口
private String address;//地址
private String telphone;//电话
private String zipcode;//邮编
public Contact(String address,String telphone,String zipcode){
this.setAddress(address);
this.setTelphone(telphone);
this.setZipcode(zipcode);
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String toString(){//覆写 Object 类中的toString()方法
return "联系方式:" + "\n" +
"\t| - 联系电话:" + this.telphone + "\n" +
"\t| - 联系地址:"+ this.address + "\n" +
"\t| - 邮政编码:"+ this.address + "\n" ;
}
}
- 定义表示第一个信息的类,个人基本信息,此类要实现 Info 接口
//定义表示第一个信息的类,个人基本信息,此类要实现 Info 接口
class Introduction implements Info{
//实现 Info 接口
private String name;
private String sex;
private int age;
public Introduction(String name,String sex,int age){
this.setName(name);
this.setSex(sex);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String toString(){
//覆写 Object 类中的toString()方法
return "基本信息:" + "\n" +
"\t| - 姓名:" + this.name + "\n" +
"\t| - 性别:" + this.sex + "\n" +
"\t| - 年龄:" + this.age;//返回对象的信息
}
}
- 定义Person 类,Person类中 info 属性的类型使用泛型
//定义Person 类,Person类中 info 属性的类型使用泛型
class Person<T extends Info>{//此处指定了上限,必须是 Info接口的子类
private T info;//此变量的类型由外部决定
public Person(T info){
this.setInfo(info);
}
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
public String toString(){//覆写Object类中的 toString()方法
return this.info.toString();
}
}
这里Person程序中 info 属性并没有指定具体类型,此类型将由程序外部决定,但必须是 Info 接口的子类,而在 Person类中覆写的 toString()方法也只是返回info属性中 toString() 方法的内容
- 将 Contact 类型设置成泛型类型
//将 Contact 类型设置成泛型类型
public class Test{
public static void main(String[] args) {
Person<Contact> per = null;//声明 Person对象,同时指定Contact类型
//实例化Person对象,同时设置info的信息
per = new Person<>(new Contact("北京市","12345","10089"));
System.out.println(per);
}
}
- 将 Introduction 类型设置成泛型类型
public class Test{
public static void main(String[] args) {
Person<Introduction> per = null;//声明 Person对象,同时指定Contact类型
//实例化Person对象,同时设置info的信息
per = new Person<>(new Introduction("Java","language","10"));
System.out.println(per);
}
}