Java学习第十四天之泛型概念

问题引入:

 问题解决:

 范例:

package 泛型;

class Cls{
	Object  a;
	public Cls(Object  a)
	{
		 this.a = a;
	}
	public Object  Get()
	{
	      return a;
	}
}
/*class Cls1
{
	String  a;
	public Cls1(String  a)
	{
		 this.a=a;
	}
	public String Get()
	{
	      return a;
	}
}*/
public class Test {
public static void main(String[] args) {
	Cls C= new Cls(200);
	System.out.println(C.Get());
	Cls cls1 = new Cls("什么时候才能变强");
	System.out.println(cls1.Get());
	
}
}

输出结果:

200
什么时候才能变强

一、泛型简介  JDK1.5以后引入

标题

泛型类:

 例子:

范例:

package 泛型;
class Maker <T>
{
	 T  a ;
	 public void Make(T a)
	 {
		  this.a=a;
	 }
	 public T Get(T a)
	 {
         return a;
 	 }	 
}
public class Test1 {
public static void main(String[] args) {
	    Maker <String> M = new Maker <String>();
	    System.out.println(M.Get("你的体重是:"));
	    Maker <Integer> C = new Maker <Integer> ();
	    System.out.println(C.Get(127));    
	    
}
}

 输出结果:

你的体重是:
127
二、泛型类及特点

 1. 类型参数是泛型

 范例:

package 泛型;
class TT <T> 
{
	T x;
	public TT (T x)
	{
		 this.x=x;
	}
	public T Get()
	{
		return x; 
	}
}



//在同一个包下不要定义同样的类名称

public class Extends {
public static void main(String[] args) {
	   TT<TT<Integer>> E = new TT<TT<Integer>>(new TT<Integer> (10));
	   System.out.println(E.Get().Get());
	   
}
}

输出结果:

10

2. 同时设定多个类型参数

范例:

package 泛型;

class  People <T1,T2>
{
	 T1 a;
	 T2 b;
	 public void Receive(T1 a, T2 b)
	 {
		 this.a=a;
		 this.b=b;
	 }
	 public T1 Geta(T1 a)
	 {
		 return a;
	 }
	 public T2 Getb(T2 b)
	 {
		 return b;
	 }
}
public class Characterstic {
public static void main(String[] args) {
	  People <Integer,Integer> P = new People <Integer,Integer>();
	  System.out.println(P.Geta(100));
	  System.out.println(P.Getb(10));
	  System.out.println(P.Geta(101)+P.Getb(101));
	  People <String,String> P1 = new People <String,String>();
	  System.out.println(P1.Geta("努力才能变强! ")+P1.Getb("加油吧!"));
}
}

输出结果:

100
10
202
努力才能变强! 加油吧!

3. 泛型类继承

 4. 泛型类可以实现泛型接口

范例:

package 泛型;

class TT <T> 
{
	T x;
	public TT (T x)
	{
		 this.x=x;
	}
	public T Get()
	{
		return x; 
	}
}
interface Cs <T>
{
	 public void myPrintf(T t);
}
class XX <T,T1>extends TT <T> implements Cs<T>
{

	T1 y;
	public XX(T x,T1 y) {
		super(x);
		this.y=y;
	}
	public T1 Gety()
	{
		return y;
	}
	@Override
	public void myPrintf(T t) {
		// TODO Auto-generated method stub
		System.out.println("少刷抖音多刷题!");
		System.out.println(""+t);
		
	}
}



//在同一个包下不要定义同样的类名称

public class Extends {
public static void main(String[] args) {
	  // TT<TT<Integer>> E = new TT<TT<Integer>>(new TT<Integer> (10));
	   //System.out.println(E.Get().Get());
	    XX<String,String> Z = new XX<String,String>("抖音 ","记录美好生活");
	    System.out.println(Z.Get()+Z.Gety());
	    Z.myPrintf("下班!");
}
}

输出结果

抖音 记录美好生活
少刷抖音多刷题!
下班!

三、 限制泛型可用类型

 范例:

package 泛型;




class Make
{
	
}
class Mk extends Make
{
	       
}
interface Move
{
	   abstract void ttrs(); 
}
class TT <T  extends Make> //使用接口 Move的话 不能用implements不然会报错 还是要用extends
{
	T x;
	public TT (T x)
	{
		 this.x=x;
	}
	public T Get()
	{
		return x; 
	}
}
interface Cs <T>
{
	 public void myPrintf(T t);
}
class XX <T extends Make,T1>extends TT <T> implements Cs<T>
{

	T1 y;
	public XX(T x,T1 y) {
		super(x);
		this.y=y;
	}
	public T1 Gety()
	{
		return y;
	}
	@Override
	public void myPrintf(T t) {
		// TODO Auto-generated method stub
		System.out.println("少刷抖音多刷题!");
		System.out.println(""+t);
		
	}
}



//在同一个包下不要定义同样的类名称

public class Extends {
public static void main(String[] args) {
	  // TT<TT<Integer>> E = new TT<TT<Integer>>(new TT<Integer> (10));
	   //System.out.println(E.Get().Get());
	    XX<Mk,String> Z = new XX<Mk ,String>(new Mk(),"记录美好生活");
	    System.out.println(Z.Get()+Z.Gety());
	    
}
}

输出结果:

泛型.Mk@33833882记录美好生活

类型通配声明:

 范例:

package 泛型通配方式;

class Maker
{
	  
}
class Manufacturer extends Maker
{
	
}
class Make <T,T1>
{ 
	private T x;
	private T1 y;
	public Make(T x, T1 y)
	{
		 this.x = x; 
		 this.y = y;
	}
	public T Getx()
	{
		 return x;
	}
	public T1 Gety()
	{
		 return y;
	}
	 
}
public class Test {
public static void main(String[] args) {
      Make<Integer,Integer> M1 = new Make<Integer,Integer>(10,100);
      Make<Double,Double> M2 = new Make<Double,Double>(10.0,100.11);
      M1=M2;
      
      
}
}

输出结果

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Type mismatch: cannot convert from Make<Double,Double> to Make<Integer,Integer>

	at 泛型通配方式.Test.main(Test.java:34)
public class Test {
public static void main(String[] args) {
      Make<Integer,Integer> M1 = new Make<Integer,Integer>(10,100);
      Make<Double,Double> M2 = new Make<Double,Double>(10.0,100.11);
      Make<Object,String> M3 =  new Make<Object,String>( "asa","dasa");
      M2 = M3;
      M1 = M3;
      M1 = M2;   
   }
}

输出结果:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Type mismatch: cannot convert from Make<Object,String> to Make<Double,Double>
	Type mismatch: cannot convert from Make<Object,String> to Make<Integer,Integer>
	Type mismatch: cannot convert from Make<Double,Double> to Make<Integer,Integer>

	at 泛型通配方式.Test.main(Test.java:35)

三、 限制泛型可用类型 

 范例:

package 泛型通配方式;

class Maker
{
	  
}
class Manufacturer extends Maker
{
	
}
class Make <T,T1>
{ 
	private T x;
	private T1 y;
	public Make(T x, T1 y)
	{
		 this.x = x; 
		 this.y = y;
	}
	public T Getx()
	{
		 return x;
	}
	public T1 Gety()
	{
		 return y;
	}
	 
}
public class Test {
public static void main(String[] args) {
      Make<Integer,Integer> M1 = new Make<Integer,Integer>(10,100);
      Make<Double,Double> M2 = new Make<Double,Double>(10.0,100.11);
      //Make<Object,String> M3 =  new Make<Object,String>( "asa","dasa");
     // M2 = M3;
      //M1 = M3;
      //M1 = M2;
      Make<?,?> M3;
      M3 = M1;
      System.out.println( M3.Getx());
      System.out.println(M3.Gety());
      int sum=0;
      sum= M1.Getx()+M1.Gety();
      //sum=M3.Getx()+M3.Gety();此时会报错;
      System.out.println(""+sum);

输出结果:

10
100
110

 五、泛型方法

  例子:

 范例:

package 泛型方法;

class Test <T>
{
	 public <T> void printMy(T t)
	 {
		 System.out.println(t);
	 }
	 public void printOther(T t)
	 {
		    System.out.println(t);
	 }  
}

public class Method {
public static void main(String[] args) {
	Test TT = new Test();
	TT.printMy(185.5);
	TT.printMy("大帅比");
	TT.printMy("有车有房");
	TT.printMy("100分");
	Test<String> T1 = new Test<String>();
	T1.printOther("真的帅");
	
	
	
}
}

输出结果:

185.5
大帅比
有车有房
100分
真的帅

限定例子:

 范例:

package 泛型方法限定;
class Makers 
{
	  public void Make( )
	  {
		   System.out.println("造一台车");
	  }
}
class Rr extends Makers
{
	 public void Make()
	 {
		 System.out.println("造一台劳斯莱斯古斯特");
	 }
}
class Bb extends Makers
{
	  public void Make()
	  {
		   System.out.println("造一台劳斯莱斯库里南BB版");
	  }
}
class Demo <T>
{
	public static <T  extends Makers> void Printf(T t)
	{
		  t.Make();
	}
}

public class RS {
public static void main(String[] args) {
	   Demo D = new Demo();
	   D.Printf(new Makers());
	   D.Printf(new Rr());
	   D.Printf(new Bb());
	   
}
}

输出结果:

造一台车
造一台劳斯莱斯古斯特
造一台劳斯莱斯库里南BB版


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小秦要变强

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

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

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

打赏作者

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

抵扣说明:

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

余额充值