泛型

概念:泛型就是参数化类型,使用广泛的类型。
起因:数据类型不明确:

  • 装入的数据类型都被当作Object对待,从而丢失自己的实际类型
  • 获取数据时往往需要转型,效率低,容易产生错误

作用:

  • 安全:在编译的时候检查类型安全
  • 省心:所有的强制转换都是自动和隐式的,提高代码的重用率

泛型类:

package fanxing;//116 泛型 -->泛型类
/*** 注意: 1.泛型只能使用引用类型,不能基本类型 * 2.泛型声明时字母不能使用在静态属性,方法上 * (泛型是在使用时候确定的,而静态属性和方法出现在编译时)*/
public class Student<T1, T2> {private T1 javascore;private T2 pyscore;public T1 getJavascore() {return javascore;}public void setJavascore(T1 javascore) {this.javascore = javascore;}public T2 getPyscore() {return pyscore;}public void setPyscore(T2 pyscore) {this.pyscore = pyscore;}public static void main(String[] args) {// 使用时候指定类型(引用类型)Student<String, Integer> s1 = new Student<String, Integer>();// 1.安全:类型检查s1.setJavascore("优秀");s1.setPyscore(88);// 2.省心:类型转换String java=s1.getJavascore();int py = s1.getPyscore();System.out.println(java);System.out.println(py);}}

泛型接口

package fanxing;/** 116 泛型 -->泛型接口* 接口中泛型字母只能用在方法中,不能用在全局常量中* * */
public interface Fanxingjiekou<T> {void jiekou(T t);
}

泛型方法

package fanxing;/** 116 泛型 -->泛型方法* 修饰符 <> 返回值类型* 只能访问对象信息,不能修改* */
public class Test {public static void main(String[] args) {test(123);test("aaa");}public static <T> void test(T a) {System.out.println(a);}}

泛型的继承
继承|实现
1.保留 -->泛型子类
2不.保留 -->按需实现,可以是泛型子类,也可以非泛型子类
属性和方法:随声明位置而定
擦除:使用继承实现 没有指定类型,类似于Object

package fanxing;
//117 泛型的继承public abstract class Father<T1, T2> {T1 age;public abstract void test(T2 name);}// * 保留 -->泛型子类
// 1.全部保留
class C1<T2, T1, A, B> extends Father<T1, T2> {@Overridepublic void test(T2 name) {}
}// 2.部分保留
class C2<T2> extends Father<Integer, T2> {@Overridepublic void test(T2 name) {}
}// * 不保留
// 1.具体类型 -->按需实现
class C3 extends Father<Integer, String> {@Overridepublic void test(String name) {}
}
// 2.没有类型 擦除class C4 extends Father {@Overridepublic void test(Object name) {}
}

泛型通配符

package fanxing;
import java.util.ArrayList;
import java.util.List;
//118 通配符,类型不确定,用于声明变量,形参上
//不能用在
//1.创建对象
//2.创建泛型类,泛型方法,泛型接口上
//也即只能用来声明,而不能创建(不能使用的时候都不知道是什么类型)
public class Tongpeifu {public static void main(String[] args) {//声明List<?> list =new ArrayList<Integer>();list=new ArrayList<String>();list=new ArrayList<Object>();test(list);//编译错误不能用在创建对象
//      list =new ArrayList<?>();}public static void test(List<?> list){}class Test<T>{}//编译错误不能用在创建泛型类//class Test2<?>{}//编译错误不能用在创建泛型方法//public static <?> void name() {}
}

泛型的上限

package fanxing;
import java.util.ArrayList;
import java.util.List;
/** extends:泛型的上限* 1.一般用于限制操作* 2.不能使用在添加数据上面,一般是读取操作* * */
public class TestExtends {public static void main(String[] args) {// extends为上限Test<Fruit> t1=new Test<Fruit>();Test<Apple> t2=new Test<Apple>();List<? extends Fruit> list=new ArrayList<Fruit>();test(list);List<Fruit> list2=new ArrayList<Fruit>();test(list2);List<Apple> list3=new ArrayList<Apple>();test(list3);}//? extends Fruitpublic static void test(List<? extends Fruit> list) {
//不能用于添加数据
//      list.add(new Apple());
//      list.add(new FushiApple());
//      list.add(new Pear());list.add(null);}//泛型类static class Test<T extends Fruit>{}}

泛型的下限

package fanxing;
import java.util.ArrayList;
import java.util.List;
public class TestSuper {
/** 118 泛型的下限* */public static void main(String[] args) {List<Apple> list1=new ArrayList<Apple>();test(list1);List<Fruit> list2=new ArrayList<Fruit>();test(list2);List<Object> list3=new ArrayList<Object>();test(list3);//规则List<? super Apple> list4=new ArrayList<Apple>();test(list4);List<? super Apple> list5=new ArrayList<Object>();test(list5);List<? super FushiApple> list6=new ArrayList<Object>();//test(list6);}public static void test(List<? super Apple> list){//能用于添加数据,不能添加父对象list.add(new Apple());list.add(new FushiApple());//list.add(new Fruit());}}

泛型没有多态,数组

package fanxing;
import java.util.ArrayList;
import java.util.List;
//泛型没有多态,数组
public class Meiduotai {public static void main(String[] args) {Fruit f1=new Apple();Fruit[] f2=new Fruit[5];//List<Fruit> list=new ArrayList<Apple>();List<? extends Fruit> list=new ArrayList<Apple>();}
}

DAY11:尚学堂高琪JAVA(116~118)相关推荐

  1. DAY12:尚学堂高琪JAVA(119~123)Hashmap 与冒泡排序

    Hashmap 与冒泡排序 map,set,list的区别 添加链接描述 添加链接描述 添加链接描述 MyArrayList.java package fanxing; import java.uti ...

  2. 【160天】尚学堂高琪Java300集视频精华笔记(129)

    明天开始,专栏增加一个黑马程序员的课程更新. 其它容器收尾讲解 队列Queue与Deque(单向队列与双向队列) Enumeration(较老的接口,JDK1.5前使用频繁,维护旧系统会用到) Has ...

  3. 尚学堂 高琪JAVA300集第十一章作业 编程题答案

    本人 JAVA初学者 在寻找这一方面的答案时没有看见 ,本着分享的精神 自己做了出来 也就传上来了 水平有限 存在有错的地方或者改进的方法 ,望大佬们可以提出 万分感谢. 1.1. 设计一个多线程的程 ...

  4. 【133天】尚学堂高淇Java300集视频精华笔记(71-72)

    第71集:常用类/file类/打印目录树状结构/递归算法 课堂代码 package com.test071;import java.io.File;public class Test071 {publ ...

  5. python 递归函数_Python尚学堂高淇|P82P86面向对象和面向过程的区别LEGB规则nonlocal_global递归函数阶乘计算案例...

    P82-递归函数-阶乘计算案例 #使用递归函数计算阶乘def factorial(n):if n==1:return 1else:return n*factorial(n-1)result=facto ...

  6. 【138天】尚学堂高淇Java300集视频精华笔记(84)

    第84集:太阳系模型/基本类的封装/Star类的建立 本集知识点 将对象尽可能的抽象,可以有效减少代码量,比如此例中的Star类 package com.test084_087_solar;impor ...

  7. python释放变量内存_Python尚学堂高淇|1113引用的本质栈内存,堆内存,内存的示意图,标识符,变量的声明初始化,垃圾回收机制...

    011-引用的本质-栈内存和堆内存-内存的示意图在Python当中,变量也成为:对象的引用,因为,变量的存储就是对象的地址变量通过地址引用了对象变量位于堆内存(压栈,出栈等细节,后续再介绍)对象位于: ...

  8. 【135天】尚学堂高淇Java300集视频精华笔记(74-76)

    第74-75集:异常机制.trycatchfinallyreturn执行顺序.捕获异常.声明异常throw.方法重写中异常的处理.手动抛出异常 异常的处理办法一:捕获异常 try try语句指定了一段 ...

  9. 【131天】尚学堂高淇Java300集视频精华笔记(65-66)

    第65集:常用类Date类的使用JDk源码分析 Date时间类(java.util.Date) 在标准Java类库中包含一个Date类.它的对象表示一个特定的瞬间,精确到毫秒. Date()分配一个D ...

  10. vb.net 同时给多个属性赋值_Python尚学堂高淇|1721时间表示unix时间点毫秒微秒time模块浮点数自动转换强制转换增强赋值运算符...

    017浮点数-自动转换-强制转换-增强赋值运算符浮点数称为float用a*b^10形式表示的科学计数法,比如:3.14,314E-2或者314e-2这些数字在内存当中也是按照科学计数法存储. > ...

最新文章

  1. 招聘行业颠覆者【伯小乐】| 手摸手产品研究院
  2. 对多个button触发enter操作,执行不同的操作
  3. WEB前端 前端开发者 如何突破技术瓶颈
  4. UEFI下面安装win7+Xubuntu18.10双系统
  5. LOAM: Lidar Odometry and Mapping in Real-time
  6. JS正则表达式从入门到入土(7)—— 分组
  7. 转载分享移动网站最佳实践
  8. php错误报告及设置级别
  9. linux 迅雷 命令行,Linux小迅雷:uGet下载工具加速 | 薄荷开源网
  10. 九九乘法表的四种打印模式
  11. NoSuchMethodError: No virtual method(Ljava/io/File;)V in class Landroid/media/MediaRec
  12. ipad如何与计算机连接网络连接不上,苹果平板ipad的无法连接无线网络WiFi如何解决...
  13. v-charts 如何更改文本颜色
  14. 【Paper】Neural Machine Translation by Jointly Learning to Align and Translate
  15. Elasticsearch:如何部署 NLP:文本嵌入和向量搜索
  16. Deployer php自动部署,Deployer 自动部署
  17. 04、js、jqurey
  18. 【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)
  19. C++读写txt文档
  20. 在HTML网页中书写JavaScript

热门文章

  1. 百度热力图颜色说明_最新黑科技!看完东莞的城市热力图,你就知道该在哪里买房了!...
  2. Ubuntu安装搜 狗输入法,最完整的步骤
  3. 命令行修改微信小程序开发AppId
  4. 优化TCP/IP,HTTP,Https,Socket,websocket,弱网及网络协议(概念)
  5. win10计算机还原点如何创建,win10系统如何建立自动还原点?
  6. win10计算机恢复到一天前,win10怎么系统还原到某一时刻 win10系统还原之后会怎么样...
  7. 天池龙珠训练营Python_Task2: 数据结构_(4)字典
  8. win10系统的应用商店不见了怎么安装回来
  9. arm linux游戏手柄(joystick)驱动移植
  10. Exception in thread “main“ java.io.NotSerializableException: