创建一个接口,三个类,实现一个人基本信息的整合。(泛型的实际运用)

首先定义标识接口——信息

package four;

public interface Info {

}

第一个类用来实现联系方式

package four;

public class Contact implements 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 String gettelphone() {
		return telphone;
	}
	public String getzipcpde() {
		return zipcode;
	}
	public String toString() {
		return "联系方式:"+"\n"+"\t|- 联系电话:"+this.telphone+
				"\t|- 联系地址:"+this.address+
				"\t|- 邮政编码:"+this.zipcode;
	}
}

ps:最后运用了toString的覆写方式,用于最后的输出

第二个类用来实现个人的基本信息

package four;

public class Intro implements Info {
	private String name;
	private String sex;
	private int age;
	public Intro(String name,String sex,int age) {
		this.name = name;
		this.sex = sex;
		this.age = age;
	}
	public String getname() {
		return name;
	}
	public String getsex() {
		return sex;
	}
	public int getage() {
		return age;
	}
	public String toString() {
		return "基本信息:"+"\n"+"\t|- 名字:"+this.name+
				"\t|- 性别:"+this.sex+
				"\t|- 年龄:"+this.age;
	}
}

ps:其实这两个类是没什么大的区别的,只是参数换了而已。都是用构造方法为属性设置值,然后用get方法来取得值而已。笔者很菜,暂时先用这个。

最后一个定义一个Person类,info属性的类型使用泛型

package four;

public class Person<T extends Info> {
	private T info;
	public Person(T info) {
		this.info = info;
	}
	
	public T getinfo() {
		return info;
	}
	public String toString() {
		return this.info.toString();
	}
}

ps:可以很清楚的看到,这个类里面的属性和方法都使用泛型。为泛型设置上限,规定泛型只能是Info接口的子类,然后继续运用构造方法和get方法设置与取得最后的值。
需要注意的是,最后toString方法中,调用的是Info接口子类中的toString方法,覆写Object类中的toString方法。

最后是主函数,分别实例化两个对象,用来实现不同的功能

package four;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String a1 = in.next();
		String a2 = in.next();
		String a3 = in.next();
		Person <Contact> a = new Person<Contact>(new Contact(a1,a2,a3));
		System.out.println("——————————————————————————————————————————————");
		System.out.println(a);
		String b1 = in.next();
		String b2 = in.next();
		int b3 = in.nextInt();
		Person <Intro> b = new Person<Intro>(new Intro(b1,b2,b3));
		System.out.println(b);
	}
}

ps:此时泛型的妙处就可以体现了,类型不相同的属性如果不用泛型转换会很恼火,但是此处只需要将泛型声明为Info的子类即可,整个属性也会随着子类的改变而改变。
**特别需要注意:**实例化Person对象时,还要实例化Info子类的对象,因为之前用于信息统计的两个类里面同样有方法的存在,所以要想使用方法,必须将该子类对象实例化。这个有时候会很难注意到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值