定义:
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型本身不具备任何的方法。但是可以通过指定其父类,则泛型具有其父类的方法等。
代码示例:
//书 class Book{ private String name; public Book(String name) { this.name = name; } public String getName(){ return name; } @Override public String toString() { // TODO Auto-generated method stub return name; } } //语文书 class ChinaBook extends Book{ public ChinaBook(String name) { super("语文课本:" + name); } } //英语书 class EnglishBook extends Book{ public EnglishBook(String name) { super("英语课本:" + name); } } class BookShop{ private List<? super Book> books = new ArrayList<>();//不需要声明泛型 //进货 public void addBook(Book b){ books.add(b); } //展示所有的book public List<? super Book> getAllBooks(){ return books; } } class BookMarket<BK extends Book>{//可以用到泛型,并使用extends,指定其父类 private List<BK> books2 = new ArrayList<>();//此种写法,必须是声明了泛型 //进货 public void addBook(BK bk){ books2.add(bk); } //展示所有的book public List<BK> getAllBooks(){ return books2; } public static void main(String[] args) { //泛型 -extends BookMarket bm = new BookMarket(); bm.addBook(new ChinaBook("小学语文")); bm.addBook(new EnglishBook("高中英语")); //泛型super BookShop bs = new BookShop(); bs.addBook(new ChinaBook("shop小学语文")); bs.addBook(new EnglishBook("shop高中英语")); System.out.println(bm.getAllBooks()); System.out.println(bs.getAllBooks()); } }
如果你想从一个数据类型里获取数据,使用 ? extends 通配符。
示例: class A extends B{ ....}
如果你想把对象写入一个数据结构里,使用 ? super 通配符。
示例: list extends B> bs = = new ArrayList();
bs.add(B的子类的对象);
小结:
extends 可用于的返回类型限定,不能用于参数类型限定。
super 可用于参数类型限定,不能用于返回类型限定。
相关推荐
内容概要 Java领域基础部分aS笔记涵盖了Java编程语言的核心概念,包括但不限于: ...技能提升:帮助有经验的开发者回顾和加强Java编程的基础知识。 面试准备:为即将参加技术面试的候选人提供复习资料。
1: Java基础语法 ...在本步骤中,将会介绍最常用的Java工具类,包括异常、包装器类、字符串处理类、集合框架及其实现类、泛型、多线程和输入输出流等内容。学习了这些,定让你的Java技能更上一层楼。
涵盖了C++基础语法和使用,面向对象,STL与泛型,Boost库和设计模式,C++编程优化技巧等非常广泛的内容,是市面上非常缺少的深度完整学习C++,培养编程技能和修养的一套系列学习课程。整个课程预计2020年底前录制...
Java核心技术:I/O、多线程、网络编程、反射、泛型等 Java虚拟机:内存模型、垃圾收集器、类加载机制等 Java企业级开发:Spring、Hibernate、MyBatis等框架原理 数据库和缓存:SQL优化、索引、Redis、Memcached等 分布式...
从C#的介绍和特点开始,逐步介绍了如何学习C#、C#的实际应用场景,以及C#的高级特性,如异步编程、LINQ、属性和泛型。此外,博客还提供了学习资源和进阶建议,如官方文档、在线教程、实践项目和加入社区。通过这个...
Java面试通常涵盖多个方面,包括Java基础知识、编程技能、问题解决能力,以及对Java生态系统和相关技术的理解。以下是一些建议的Java面试准备要点和资源描述: 一、Java基础知识 数据类型、变量与运算符:理解Java...
着力让读者在充分理解Java语言和Java类库的基础上,灵活应用Java提供的高级特性,具体包括面向对象程序设计、反射与代理、接口与内部类、异常处理、泛型程序设计、集合框架、事件监听器模型、图形用户界面设计和并发...
掌握Java语法和基础:掌握Java的语言特性、数据类型、运算符、控制结构、面向对象编程等基础知识点。 掌握Java标准库:掌握Java标准库中的重要类和接口,如String、ArrayList、HashMap、Thread、Socket等。 掌握Java...
本书详细介绍用C#语言进行程序开发需要掌握的知识和技术。全书由浅入深分三大部分,...前言和附录分别给出.NET程序员开发职位要求、技能等级、进阶之路,以及面试宝典,可帮助开发者新人快速进阶,找到适合自己的工作。
高级特性应用:学习Swift语言的高级特性,如协议、泛型、错误处理等 实战项目开发:通过实战项目开发,学习Swift语言在iOS应用开发中的应用技巧和最佳实践 阅读建议: 系统学习:按照教程的顺序,系统学习Swift语言...
C#基础(oop,IO,泛型,反射,多线程和异步,委托和事件,序列化,事务,windows服务,注册表,com,网络编程等) ado.net asp.net asp.net mvc winform(自带控件,自定义控件,dev控件,dotnetbar等) web ...
1.具有扎实的Java基础,对面向对象编程有深刻的理解,熟练掌握java IO流、集合、多线程、反射,泛型,注解,网络编程等基础开发技术; 2.熟练使用常用的java集合类以及常用集合的源码,熟悉多线程以及同步容器以及...
技术基础:操作符重载and模板(泛化, 全特化, 偏特化).mp4 ├─11. 分配器.mp4 ├─12. 容器之间的实现关系与分类.mp4 ├─13. 深度探索list(上).mp4 ├─14. 深度探索list(下).mp4 ├─15. 迭代器的设计原则和...
首先从基础讲起,介绍了如何编译和运行java程序,然后讨论了关键字、语法和一些结构,它们共同构成了java语言的核心。之后,《新手学java7编程(第5版)》介绍了java的一些高级特性,包括多线程程序设计和泛型。最后以...
这些实验旨在帮助读者掌握C#编程的基本知识和技能,并为他们在软件开发领域中打下坚实的基础。 首先,C#语言基础实验旨在介绍C#语言的基本语法和编程环境,包括变量、运算符、流程控制语句、函数等。通过这些实验,...
Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。
Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。
Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。
Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。
Java源码通常是指用Java编程语言编写的程序源代码。这些源代码可以被Java编译器编译成字节码,然后在Java虚拟机(JVM)上运行。Java是一种面向对象的...也适合初学者入门Java编程,逐步掌握从基础到高级的知识和技能。