本章目标
加深泛型的理解
掌握标识接口的定义
题目要求
用户在设计类的时候往往会使用类的关联关系,例如,一个人中可以定义一个信息的属性,但是一个人可能有各种各样的信息(例如:联系方式、基本信息等),所以此信息属性的类型就可以通过泛型进行声明,之后只要设计相应的信息类即可。
定义标识接口 —— 信息
但是需要注意的是,既然需要的是一个信息的类,所以在设计此类的时候最好做一个信息的标识接口,只要传递的是此接口的子类就可以设置成泛型类型。
interface Info{ // 定义一个标识接口,此接口没有定义任何方法
}
public interface Info {//定义一个标识接口,此接口没有定义任何方法
}
public class Contact implements Info {//实现 Info 接口
private String address;//联系地址
private String telphone;//联系方式
private String zipcode;//邮政编码
public Contact(String address, String telphone, String zipcode) {
this.address = address;
this.telphone = telphone;
this.zipcode = 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.zipcode+"\n";//返回对象的信息
}
}
public class Introduction implements Info {//实现 Info 接口
private String name;//定义 name 属性
private String sex;//定义 sex 属性
private int age;//定义 age 属性
public Introduction(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {//取得姓名
return name;
}
public void setName(String name) {//设置姓名
this.name = name;
}
public String getSex() {//取得性别
return sex;
}
public void setSex(String sex) {//设置性别
this.sex = sex;
}
public int getAge() {//取得年龄
return age;
}
public void setAge(int age) {//设置年龄
this.age = age;
}
public String toString(){//覆写 Object 类中的 toString() 方法
return "基本信息:\n"+
"\t┣ 姓名:"+this.name+"\n"+
"\t┣ 性别:"+this.sex+"\n"+
"\t┣ 年龄:"+this.age+"\n";//返回对象的信息
}
}
public class Person <T extends Info>{//此处指定了上限,必须是 Info 接口的子类
private T info;//此变量的类型由外部决定
public Person(T info) {//通过构造方法设置信息属性内容
this.info = info;
}
public T getInfo() {//取得 info 属性
return info;
}
public void setInfo(T info) {//设置 info 属性
this.info = info;
}
public String toString(){
return this.info.toString();//覆写 Object 类中的 toString() 方法
}
}
public class GenericDemo32 {
public static void main(String[] args) {
Person<Contact> per = null;//声明 Person 对象,同时指定 Contact 类型
//实例化 Person 对象,同时设置 info 的信息
per = new Person<Contact>(new Contact("北京市","01123456789","100088"));
System.out.println(per);
}
/* 结果:
* 联系方法:
* ┣ 联系电话:01123456789
* ┣ 联系地址:北京市
* ┣ 邮政编码:100088
* */
}
public class GenericDemo33 {
public static void main(String[] args) {
Person<Introduction> per = null;//声明 Person 对象,同时指定 Introduction 类型
//实例化 Person 对象,同时设置 info 的信息
per = new Person<Introduction>(new Introduction("chaoyi","boy",30));
System.out.println(per);
}
/* 结果:
* 基本信息:
* ┣ 姓名:chaoyi
* ┣ 性别:boy
* ┣ 年龄:30
* */
}