Java泛型——特点

本文详细介绍了Java中的泛型类及其特点,包括:1) 泛型类的类型参数可以是泛型类,如Cls1类中嵌套使用;2) 泛型类可以设置多个类型参数,如Cls4类的T和T2;3) 泛型类可以继承泛型类,Cls2类继承Cls1并添加新类型参数;4) 泛型类可以实现泛型接口,Cls2类同时继承泛型类和实现泛型接口Cls3。通过实例展示了泛型类的创建和方法调用,以及泛型在旧版本与新版本中的行为变化。
摘要由CSDN通过智能技术生成

一、泛型类及特点

1.1泛型的类型参数可以是泛型类

class Cls1<T>{
	T a;
	public Cls1(T a){
		this.a = a;
	}
	public T getData(){
		return a;
	}
}

public class Test {
	public static void main(String[] args) {		
		Cls1<Cls1<Integer>> cls1 = new Cls1<Cls1<Integer>>(new Cls1<Integer>(10));
		System.out.println(cls1.getData().getData());
	}
}
/*
10
*/

1.2泛型类可以同时设置多个类型参数

class Cls4<T,T2>{	
	T a;
	T2 b;
	public Cls4(T a,T2 b){
		this.a = a;
		this.b = b;
	}
	public T getData3(){
		return a;
	}
	public T2 getData4(){
		return b;
	}
}

public class Test {
	public static void main(String[] args) {		
		Cls4<Integer,String> c4 = new Cls4<Integer,String>(100,"wei");
		System.out.println(c4.getData3());
		System.out.println(c4.getData4());
		System.out.println(c4.getData3() + c4.getData4()); //+表示连接起来,并不是相加
		
		Cls4<Integer,Integer> c5 = new Cls4<Integer,Integer>(100,10);
		System.out.println(c5.getData3());
		System.out.println(c5.getData4());
		System.out.println(c5.getData3() + c5.getData4());
		int n = 0;
		n = c5.getData3() + c5.getData4();	//泛型在旧版本不可以相加,现在可以相加
		System.out.println("n=" + n);
	}
}
/*
100
wei
100wei
100
10
110
n=110
*/

1.3泛型类可以继承泛型类

abstract class Cls1<T>{
	T a;
	public Cls1(T a){
		this.a = a;
	}
	public T getData(){
		return a;
	}
	abstract void printInfo();	//抽象方法
}

class Cls2<T,T2> extends Cls1<T>{	//继承Cls1
	T2 b;
	public Cls2(T a,T2 b){
		super(a);
		this.b = b;
	}
	public T2 getData2(){
		return b;
	}
	@Override
	//可以把这个注释掉,在类前面继续加abstract,不需要实现这个方法
	void printInfo() {
		// TODO Auto-generated method stub
		System.out.println("输出");
	}
}

public class Test {
	public static void main(String[] args) {		
		Cls2<Integer,String> cls = new Cls2<Integer,String>(10,"xiao");
		cls.printInfo();
		System.out.println(cls.getData());
		System.out.println(cls.getData2());
	}
}
/*
输出
10
xiao
*/

1.4泛型类可以实现泛型接口


abstract class Cls1<T>{
	T a;
	public Cls1(T a){
		this.a = a;
	}
	public T getData(){
		return a;
	}
	abstract void printInfo();	//抽象方法
}

//接口
interface Cls3<T>{
	abstract void printInfoInCls3(T t);
}

class Cls2<T,T2,T3> extends Cls1<T> implements Cls3<T3>{	//继承Cls1,接口Cl3,添加一个T3
	T2 b;
	public Cls2(T a,T2 b){
		super(a);
		this.b = b;
	}
	public T2 getData2(){
		return b;
	}
	@Override
	//可以把这个注释掉,在类前面继续加abstract,不需要实现这个方法
	void printInfo() {
		// TODO Auto-generated method stub
		System.out.println("输出");
	}
	//接口实现
	public void printInfoInCls3(T3 t) {
		// TODO Auto-generated method stub
		System.out.println(t);
	}
}

public class Test {
	public static void main(String[] args) {		
		Cls2<Integer,String,String> cls = new Cls2<Integer,String,String>(10,"xiao");
		cls.printInfo();
		System.out.println(cls.getData());
		System.out.println(cls.getData2());
		
		cls.printInfoInCls3("小伟");
	}
}
/*
输出
10
xiao
小伟
*/

师承上官可编程 —— 陈立臣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dz小伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值