需求:表示用户的基本信息
分析
1、一个人可以定义一个信息属性,而一个人又有多种信息。
2、信息属性的类型通过泛型声明,设计相应的信息类。
3、需要一个信息类就可以设计一个信息的标识接口
1、定义标识接口
标识接口:接口中无任何方法。
interface Info{
//标识接口
}
2、定义表示信息的类——姓名、年龄
class Introduction implements Info{
private String name;
private int age;
public Introduction(String name,int age) {
this.setAge(age);
this.setName(name);
}
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;
}
@Override
public String toString() {
return "Introduction [name=" + name + ", age=" + age + "]";
}
}
3、定义表示信息的类——电话、地址
class Contact implements Info{
private String address;
private String tel;
public Contact(String address, String tel) {
super(); //平常隐藏了
this.address = address;
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "联系方式:"+"\n"+
"\t地址:" + address + "\n"+
"\t电话号码:" + tel;
}
}
4、泛型确定属性类型
class Person<T extends Info>{ //必须是Info类的子类
private T Info;
public Person(T info) {
super();
Info = info;
}
public T getInfo() {
return Info;
}
public void setInfo(T info) {
Info = info;
}
@Override
public String toString() {
return "Person [Info=" + Info + "]";
}
}
5、将接口子类的类型设置为泛型类型
public class GenericsDemo07 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person<Contact> per=new Person<>(new Contact("成都", "168"));
System.out.println(per.toString());
}
}