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

news2025/6/2 8:05:54

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 {
    @Override
    public void eat() {
        System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的波斯猫,正在吃小饼干");
    }
}
package com.bjpowernode.test17;

public class LiHuaCat extends Cat {
    @Override
    public void eat() {
        System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的狸花猫,正在吃🐟");
    }
}
package com.bjpowernode.test17;

public class HuskyDog extends Dog {
    @Override
    public void eat() {
        System.out.println("一只叫做" + getName() + "的," + getAge() + "岁的哈士奇 ,正在吃骨头,边吃边拆家");
    }
}
package com.bjpowernode.test17;

public class TeddyDog extends Dog {
    @Override
    public 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.coloradmin.cn/o/2393372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

下一代液晶显示底层技术与九天画芯的技术突围

一、液晶产业&#xff1a;撑起数字经济的显示脊梁 &#xff08;一&#xff09;全球显示市场的核心支柱 作为电子信息产业的战略基石&#xff0c;液晶显示&#xff08;LCD&#xff09;占据全球平板显示市场超 60% 的份额&#xff0c;2022 年全球市场规模达 782.41 亿元&#xf…

[NOIP 2001 普及组] 求先序排列 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String infixOrder sc.nextLine(); // 中序String postOrder sc.nextLine(); // 后序sc.close();System.out.println(preOrder(infixOrder, postOrder))…

Rockey Linux 安装ffmpeg

1.环境准备 Rockey linux 9.2 ffmpeg 静态资源包 这个是我自己的&#xff1a; https://download.csdn.net/download/liudongyang123/90920340https://download.csdn.net/download/liudongyang123/90920340 这个是官网的 Releases BtbN/FFmpeg-Builds GitHub 以上两个资…

STM32 Modbus RTU从机开发实战:核心实现与五大调试陷阱解析

知识点1【CRC校验】 CRC校验生成网址 CRC&#xff08;循环冗余校验&#xff09;在线计算_ip33.com 知识点2【代码演示】 代码书写思路 代码演示 main.c #include "stm32f10x.h" #include "stm32f10x_conf.h" #include "rs485.h"int main(voi…

Python----目标检测(《Fast R-CNN》和Fast R-CNN)

一、《Fast R-CNN》 1.1、基本信息 作者&#xff1a;Ross Girshick 机构&#xff1a;Microsoft Research 发表时间&#xff1a;2015年 论文链接&#xff1a;arXiv:1504.08083 代码开源&#xff1a;GitHub仓库&#xff08;MIT License&#xff09; 1.2、主要内容 Fast R…

iEKF的二维应用实例

如果熟悉 EKF 与卡尔曼的推导的话&#xff0c;iEKF 就比较容易理解&#xff0c;关于卡尔曼滤波的推导以及EKF&#xff0c;可以参考以前的文章&#xff1a; 卡尔曼滤波原理&#xff1a;https://blog.csdn.net/a_xiaoning/article/details/130564473?spm1001.2014.3001.5502 E…

【通关文件操作(下)】--文件的顺序读写(续),sprintf和sscanf函数,文件的随机读写,文件缓冲区,更新文件

目录 四.文件的顺序读写(续) 4.8--fwrite函数 4.9--fread函数 五.sprintf函数和sscanf函数 5.1--函数对比 5.2--sprintf函数 5.3--sscanf函数 六.文件的随机读写 6.1--fseek函数 6.2--ftell函数 6.3--rewind函数 七.文件缓冲区 7.1--fflush函数 八.更新文件 &…

mysql的Memory引擎的深入了解

目录 1、Memory引擎介绍 2、Memory内存结构 3、内存表的锁 4、持久化 5、优缺点 6、应用 前言 Memory 存储引擎 是 MySQL 中一种高性能但非持久化的存储方案&#xff0c;适合临时数据存储和缓存场景。其核心优势在于极快的读写速度&#xff0c;需注意数据丢失风险和内存占…

【数据结构】——二叉树堆(下)

一、堆中两个重要的算法 我们前面学习了树的概念和结构&#xff0c;还要树的一种特殊树--二叉树&#xff0c;然后我们学习了堆&#xff0c;知道了堆分为大堆和小堆&#xff0c;接下来我们就使用堆来进行一个排序。 在学习我们的堆排序前&#xff0c;我们先详细学习一下我们堆…

t009-线上代驾管理系统

项目演示地址 摘 要 使用旧方法对线上代驾管理系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在线上代驾管理系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题…

目标检测预测框置信度(Confidence Score)计算方式

预测框的置信度&#xff08;Confidence Score&#xff09;是目标检测模型输出的一个关键部分&#xff0c;它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型&#xff08;如Faster R-CNN、SSD、YOLO、DETR等&#xff09;在计算置信度时有其特有的机制…

【题解-洛谷】B4295 [蓝桥杯青少年组国赛 2022] 报数游戏

题目&#xff1a;B4295 [蓝桥杯青少年组国赛 2022] 报数游戏 题目描述 某班级男生人数为 X X X 人&#xff0c;女生人数为 Y Y Y 人&#xff0c;现全班同学围成一个圆圈&#xff0c;并按照顺时针方向为每名同学编号&#xff08;从 1 1 1 到 X Y XY XY&#xff09;。现给…

Bootstrap项目 - 个人作品与成就展示网站

文章目录 前言一、项目整体概述1. 项目功能介绍1.1 导航栏1.2 首页模块1.3 关于我模块1.4 技能模块1.5 作品模块1.6 成就模块1.7 博客模块1.8 联系我模块 2. 技术选型说明 二、项目成果展示1. PC端展示1.1 首页1.2 关于我1.3 技能1.4 作品1.5 成就1.6 博客1.7 联系我 2. 移动端…

新能源汽车霍尔线束介绍

新能源汽车作为传统燃油车的重要替代方案&#xff0c;其核心驱动系统依赖于高效、精准的电子控制技术。在这一体系中&#xff0c;霍尔线束作为关键传感器组件&#xff0c;承担着电机转速、位置信号的实时采集与传输任务&#xff0c;其性能直接影响整车动力输出的稳定性和能量利…

气镇阀是什么?

01、阀门介绍&#xff1a; 油封机械真空泵的压缩室上开一小孔&#xff0c;并装上调节阀&#xff0c;当打开阀并调节入气量&#xff0c;转子转到某一位置&#xff0c;空气就通过此孔掺入压缩室以降低压缩比&#xff0c;从而使大部分蒸汽不致凝结而和掺入的气体一起被排除泵外起此…

SmolVLM2: The Smollest Video Model Ever(七)

编写测试代码与评价指标 现在的数据集里面只涉及tool的分类和手术phase的分类&#xff0c;所以编写的评价指标还是那些通用的&#xff0c;但是&#xff1a; predicted_labels:[The current surgical phase is CalotTriangleDissection, Grasper, Hook tool exists., The curre…

RFID综合项目实训 | 基于C#的一卡通管理系统

目录 基于C#的一卡通管理系统 【实验目的】 【实验设备】 【实验内容】 【实验步骤】 实验准备 第一部分 界面布局设计 ​第二部分 添加串口通讯函数及高频标签操作功能函数(部分代码&#xff09; 第五部分 实验运行效果 基于C#的一卡通管理系统 【实验目的】 熟悉 …

mysql如何设置update时间字段自动更新?

之前在给网站做表设计的时候时间字段都是用的datetime类型&#xff0c;初始值都是设置的CURRENT_TIMESTAMP。 由于给文章表设计的有创建时间和更新时间两个字段&#xff0c;但是更新时间字段需要在更新文章后再次更新&#xff0c;当时由于不了解mysql还可以设置自动更新时间戳…

【第4章 图像与视频】4.5 操作图像的像素

文章目录 前言示例-获取和修改图像数据图像数据的遍历方式图像滤镜负片滤镜黑白滤镜浮雕滤镜filter滤镜属性 前言 getImageData() 与 putImageData() 这两个方法分别用来获取图像的像素信息&#xff0c;以及向图像中插入像素。与此同时&#xff0c;如果有需要&#xff0c;也可…

Science Advances 上海理工大学与美国杜克大学(Duke University)共同开发了一种仿生复眼相机

编辑丨%科学家开发了一种 AI 辅助的仿生复眼相机。炎炎夏日&#xff0c;相信各位读者都有被蚊子骚扰过的恼火记忆。但往往想要清剿蚊子的时候&#xff0c;却被它灵巧地躲开&#xff0c;再难找到。诸如蚊子这种节肢动物的视觉系统已经进化了 5 亿多年&#xff0c;从寒武纪一直到…