实例讲解-泛型操作范例
1,题目要求:
2,本实例主要采用知识点
关联,泛型,接口。
3,具体内容
现在假设要表示一个让信息:
1)基本信息
2)联系方式。
在此时,肯定要设计一个接口,因为只有实现了此接口的类才应该表示人的信息。
interface Info{ // 只有此接口的子类才是表示人的信息 }
此接口定义完成,但是在此接口中没有任何方法,所以此时,这个接口称为标识接口。之后定义人的类,人的类中只要是此接口子类就可以表示人的信息。
class Contact implements 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 void setAddress(String address){ this.address = address ; } public void setTelphone(String telphone){ this.telphone = telphone ; } public void setZipcode(String zipcode){ this.zipcode = zipcode ; } public String getAddress(){ return this.address ; } public String getTelphone(){ return this.telphone ; } public String getZipcode(){ return this.zipcode ; } public String toString(){ return "联系方式:" + "\n" + "\t|- 联系电话:" + this.telphone + "\n" + "\t|- 联系地址:" + this.address + "\n" + "\t|- 邮政编码:" + this.zipcode ; } }; class Introduction implements 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 void setName(String name){ this.name = name ; } public void setSex(String sex){ this.sex = sex ; } public void setAge(int age){ this.age = age ; } public String getName(){ return this.name ; } public String getSex(){ return this.sex ; } public int getAge(){ return this.age ; } public String toString(){ return "基本信息:" + "\n" + "\t|- 姓名:" + this.name + "\n" + "\t|- 性别:" + this.sex + "\n" + "\t|- 年龄:" + this.age ; } }; class Person<T extends Info>{ //表示这里的泛型必须是Info的子类,也就是说,在这个例子中,必须是Info接口的子类Introduction或者Contact类作为泛型,才能使用这个人的类,表示人的信息。 private T info ; public Person(T info){ // 通过构造方法设置信息属性内容 this.setInfo(info); } public void setInfo(T info){ this.info = info ; } public T getInfo(){ return this.info ; } public String toString(){ // 覆写Object类中的toString()方法 return this.info.toString() ; } };
先将联系方式作为基本信息:
public class GenericsDemo32{ public static void main(String args[]){ Person<Contact> per = null ; // 声明Person对象 per = new Person<Contact>(new Contact("北京市","01051283346","100088")) ; System.out.println(per) ; } };
将自我介绍作为基本信息:
public class GenericsDemo33{ public static void main(String args[]){ Person<Introduction> per = null ; // 声明Person对象 per = new Person<Introduction>(new Introduction("李兴华","男",30)) ; System.out.println(per) ; } };
总体代码:
interface Info{ // 只有此接口的子类才是表示人的信息 } class Contact implements 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 void setAddress(String address){ this.address = address ; } public void setTelphone(String telphone){ this.telphone = telphone ; } public void setZipcode(String zipcode){ this.zipcode = zipcode ; } public String getAddress(){ return this.address ; } public String getTelphone(){ return this.telphone ; } public String getZipcode(){ return this.zipcode ; } public String toString(){ return "联系方式:" + "\n" + "\t|- 联系电话:" + this.telphone + "\n" + "\t|- 联系地址:" + this.address + "\n" + "\t|- 邮政编码:" + this.zipcode ; } }; class Introduction implements 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 void setName(String name){ this.name = name ; } public void setSex(String sex){ this.sex = sex ; } public void setAge(int age){ this.age = age ; } public String getName(){ return this.name ; } public String getSex(){ return this.sex ; } public int getAge(){ return this.age ; } public String toString(){ return "基本信息:" + "\n" + "\t|- 姓名:" + this.name + "\n" + "\t|- 性别:" + this.sex + "\n" + "\t|- 年龄:" + this.age ; } }; class Person<T extends Info>{ private T info ; public Person(T info){ // 通过构造方法设置信息属性内容 this.setInfo(info); } public void setInfo(T info){ this.info = info ; } public T getInfo(){ return this.info ; } public String toString(){ // 覆写Object类中的toString()方法 return this.info.toString() ; } }; public class GenericsDemo33{ public static void main(String args[]){ Person<Introduction> per = null ; // 声明Person对象 per = new Person<Introduction>(new Introduction("李兴华","男",30)) ; System.out.println(per) ; } };
总结
1)使用泛型之后,从整个操作的代码来说更合理,在日后讲解的类集上面,要大量使用泛型,本章要把泛型的基本概念全部掌握清楚。
2)通过利用接口,和泛型的受限操作,使得只有接口的子类才能作为泛型类,作为人的类的基本信息传递。