泛型类,泛型接口
package com.msb.test01; /** * @author : liu * 日期:09:01:04 * 描述:GenerivTes就是一个普通的类 * GenericTest<E>是一个泛型类 * <>里面就是一个参数类型,但是这个类型现在是不确定的,相当于一个占位 * 但是确定的这个类型是引用数据类型,而不是基本数据类型 * 版本:1.0 */ public class GenericTest<E> { int age; String name; E sex; public void a(E n){ } public void b(E[] m){ } } class Test{ //这是一个main方法:是程序的入口 public static void main(String[] args) { //GenericTest进行实例化: //(1)实例化的时候不指定泛型:如果在实例化的时候不明确的制定类的泛型,那么认为泛型为Object类型 GenericTest gt1 = new GenericTest(); gt1.a("abc"); gt1.a(17); gt1.a(9.8); gt1.b(new String[]{"a","b","c"}); //(2)实例化的时候制定泛型: GenericTest<String> gt2=new GenericTest(); gt2.sex="男"; gt2.a("abc"); gt2.b(new String[]{"a","b","c"}); } }
【2】继承情况:
(1)父类指定泛型
class SubGenericTest extends GenericTest<Integer>{ } class Demo{ //这是一个main方法:是程序的入口 public static void main(String[] args) { //指定父类泛型,那么子类就不需要指定泛型了,可以直接使用 SubGenericTest sgt = new SubGenericTest(); sgt.a(19); } }
(2)父类不指定泛型
如果父类不指定泛型,那么子类也会变成一个泛型类,那么这个E的类型可以在创建子类的时候确定
class SubGenericTest2<E> extends GenericTest<E>{ }
(3)测试类
class Demo2{ //这是一个main方法:是程序的入口 public static void main(String[] args) { SubGenericTest2<String> sgt1 = new SubGenericTest2<>(); sgt1.a("abc"); sgt1.sex="女"; } }
【3】应用场合
【4】细节
(1)泛型可以定义多个参数类型
public class Test01 <A,B,C>{ A age; B name; C sex; public void a(A a,B b,C c){ } }
(2)泛型类的构造器的写法
(3)不同的泛型的引用类型不可以相互赋值
【4】泛型如果不指定,那么就会被擦除,类型就会被指定为Object类型
【5】泛型类中的静态方法不能使用泛型方法
【6】不能直接使用E[]的创建
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)