当前位置: 首页 > article >正文

JAVA 集合的进阶 泛型的继承和通配符

1 泛型通配符

可以对传递的类型进行限定

1.1 格式

?                               表示不确定的类型
?extends   E:       表示可以传递 E 或者 E 所有的子类类型
?super E:             表示可以传递 E 或者 E 所有的父类类型

1.2 应用场景

  • 如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。
  • 如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符

泛型的通配符:关键点:可以限定类型的范围。

1.3 练习

父类 

package com.bjpowernode.test17;public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void eat();
}

子类

package com.bjpowernode.test17;public abstract class Cat extends Animal{   //不要在这里重写 eat 方法,也写成抽象类!!//1.继承抽象类,重写里面所有的抽象方法//2.本身Cat也是一个抽象的,让Cat的子类再重写重写方法//因为猫的两个子类中eat的方法体还是不一样的。}
package com.bjpowernode.test17;public abstract class Dog extends Animal {
}
package com.bjpowernode.test17;public class PersianCat extends Cat {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的波斯猫,正在吃小饼干");}
}
package com.bjpowernode.test17;public class LiHuaCat extends Cat {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的狸花猫,正在吃🐟");}
}
package com.bjpowernode.test17;public class HuskyDog extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的哈士奇 ,正在吃骨头,边吃边拆家");}
}
package com.bjpowernode.test17;public class TeddyDog extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的泰迪,正在吃骨头");}
}

测试类

package com.bjpowernode.test17;import java.util.ArrayList;public class test {public static void main(String[] args) {ArrayList<LiHuaCat> list1 = new ArrayList<>();ArrayList<HuskyDog> list2 = new ArrayList<>();keepPet(list1);keepPet2(list2);keepPet3(list1);keepPet3(list2);}///要求1:该方法能养所有品种的猫,但是不能养狗public static void keepPet(ArrayList<? extends Cat> list){}//要求1:该方法能养所有品种的狗,但是不能养猫public static void keepPet2(ArrayList<? extends Dog> list){}//该方法能养所有的动物,但是不能传递其他类型public static void keepPet3(ArrayList<? extends Animal> list){}
}

2 总结

  • 泛型不具备继承性但是数据具备继承性
  • 泛型中不能写基本数据类型
  • 指定泛型的具体类型后,传递数据时,可以传入该类型和他的子类类型
  • 如果不写泛型,类型默认是Object
  • 泛型的通配符:?
  • ? extend E
  • ? super E
  • 定义类、方法、接口的时候,如果类型不确定,就可以定义泛型
  • 如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符

参考链接:

集合进阶-09-泛型的通配符和综合练习_哔哩哔哩_bilibili

http://www.lryc.cn/news/2393372.html

相关文章:

  • 机器学习与深度学习05-决策树01
  • 下一代液晶显示底层技术与九天画芯的技术突围
  • [NOIP 2001 普及组] 求先序排列 Java
  • Rockey Linux 安装ffmpeg
  • STM32 Modbus RTU从机开发实战:核心实现与五大调试陷阱解析
  • Python----目标检测(《Fast R-CNN》和Fast R-CNN)
  • iEKF的二维应用实例
  • 机器学习中的线性回归:从理论到实践的深度解析
  • 【通关文件操作(下)】--文件的顺序读写(续),sprintf和sscanf函数,文件的随机读写,文件缓冲区,更新文件
  • mysql的Memory引擎的深入了解
  • 尚硅谷-尚庭公寓部署文档
  • 使用函数证明给定的三个数是否能构成三角形
  • 【数据结构】——二叉树堆(下)
  • t009-线上代驾管理系统
  • 目标检测预测框置信度(Confidence Score)计算方式
  • 【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏
  • Bootstrap项目 - 个人作品与成就展示网站
  • 新能源汽车霍尔线束介绍
  • 2023网络应用专业-Python程序设计复习题目
  • Termux可用中间人网络测试工具Xerosploit
  • 气镇阀是什么?
  • SmolVLM2: The Smollest Video Model Ever(七)
  • RFID综合项目实训 | 基于C#的一卡通管理系统
  • mysql如何设置update时间字段自动更新?
  • 数据库备份与恢复专业指南
  • 【第4章 图像与视频】4.5 操作图像的像素
  • Science Advances 上海理工大学与美国杜克大学(Duke University)共同开发了一种仿生复眼相机
  • 正点原子Z20 ZYNQ ​​​开发板​​发布!板载FMC LPC、LVDS LCD和WIFI蓝牙等接口,资料丰富!
  • 软件测评中心如何确保软件品质?需求分析与测试计划很关键
  • 004 flutter基础 初始文件讲解(3)