java的面向对象编程(oop)——认识泛型

前言:

打好基础,daydayup!

 泛型

1,认识泛型:

定义类,接口,方法时,同时声明了一个或多个类型变量(例:<E>),称为泛型,泛型接口,泛型方法,这些统称为泛型。

 以ArrayList语句为例:

 ArrayList<E> 对象 = new ArratList<>();

 ArrayList没声明变量时,可以添加任何对象;但声明变量后,只能添加指定对象。

2,泛型原理:

泛型原理就是把具体的数据类型作为参数传给类型变量。如下图:在使用ArrayList语句时,ArrayList会把数据类型传给源码中的类型变量。

3,泛型作用

泛型提供了在编译阶段约束所能操作的数据类型,可以避免强制转换及替他数据异常。

4,自定义泛型

        1)自定义泛型类

表达方式:

修饰符 class 类名<类型变量,类型变量...>{...}

例:

public class ArrayList<E> {内容
}
实验1:

定义一个泛型源码,使其可以存储数据也可以取出数据。 

 操作如下图:

public class fandemo<A>//类型变量建议用大写英文字母{private Object[] arr = new Object[10];
//定义一个object数组,方便存储不同类型数据private  int size; //设置数据(方便存入数组)public boolean add(A a){arr[size++] = a;  //把数据存入数组return true;}public A get(int index){ //
设置索引        return (A)arr[index];// 通过索引返回数组}
}

结果如下:

 fandemo声明<String>变量时,只能添加指定对象。同时可以通过get方法访问数组

 2)自定义泛型接口

 表达方式:

修饰符 interface 接口名<类型变量,类型变量...>{...}

例:

public interface fan <E>{...}
实验2:

定义一个泛型数据处理接口,使其可以添加数据也可以取出数据。

操作如下:

public interface date<E> {void add(E e);ArrayList<E> get(String name);
}

 随后创建一个cardate用来承接接口便可。

 3)自定义泛型方法

表达如下:

修饰符 <类型变量,类型变量...> 返回值类型 方法名 (形参列表){...}

例:

public static <T> T fangfa(T t ){.return t;
}
public static <T> void goo(T t ){...}
实验3:

创建一个泛型方法,使所有汽车类都可以使用,但汽车类以外的类不能使用

操作如下:

首先创建一个car类,并创建子类使其继承car。

其次创建一个泛型方法,并使其只能继承car及car的子类。

    public static <T extends  car> void go(ArrayList<T> cars){}

 然后使用方法即可

最后:由于方法仅限car及car的子类使用,其他的会报错。

结语:

泛型已经属于架构的语法了,初期能够读懂即可。整理结束,撒花!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468688.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

炫酷3D按钮

一.预览 该样式有一种3D变换的高级感&#xff0c;大家可以合理利用这些样式到自己的按钮上 二.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice…

AJAXJSON入门篇

AJAX&JSON 概念&#xff1a;AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用H…

Netty应用(十二) 之 Netty相关参数 Http协议 IO多路复用回顾

目录 28.netty的相关参数 29.HTTP1.0、HTTP1.1 和 HTTP2.0 的区别 30.如何理解IO多路复用&#xff1f; 28.netty的相关参数 1.netty的参数设置体系 客户端&#xff1a; bootstrap.option(); //在这里配置客户端一些配置信息 服务端&#xff1a; serverBootstrap.option(…

JavaScript中的Symbol:加密与安全性

JavaScript中的Symbol是一种唯一且不可变的数据类型&#xff0c;引入了一种新的基本数据类型&#xff0c;用于表示独一无二的标识符。在本文中&#xff0c;我们将深入介绍JavaScript中的Symbol&#xff0c;讨论如何将其应用于JS加密中&#xff0c;提供案例代码&#xff0c;并说…

【git】.gitignore 的匹配规则

每行一个规则&#xff1a;每行只能包含一个规则&#xff0c;多个规则需要分别写在不同的行上。 示例&#xff1a; # 忽略日志文件 logs/ # 忽略临时文件 temp.txt种类匹配&#xff1a; 文件&#xff1a;在规则的开头指定文件名或路径&#xff0c;如 file.txt。 示例&#xff1a…

Java17之使用Lambda表达式对对象集合中指定的字段进行排序

Java17之使用Lambda表达式对对象集合中指定的字段进行排序 文章目录 Java17之使用Lambda表达式对对象集合中指定的字段进行排序1. 集合对象排序1. Java实体类2. 正序排序3.倒序排序 1. 集合对象排序 Java8起可用 List 的 sort 方法进行排序&#xff0c;形参为函数式接口Compara…

Hive on Spark配置

前提条件 1、安装好Hive&#xff0c;参考&#xff1a;Hive安装部署-CSDN博客 2、下载好Spark安装包&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1plIBKPUAv79WJxBSbdPODw?pwd6666 3、将Spark安装包通过xftp上传到/opt/software 安装部署Spark 1、解压spark-3.3…

第二部分阶段总结

第二部分阶段总结 1.知识补充1.1 nolocal关键字1.2 yield from1.3 深浅拷贝 2.阶段总结3.考试题 1.知识补充 1.1 nolocal关键字 在之前的课程中&#xff0c;我们学过global关键字。 name rootdef outer():name "武沛齐"def inner():global namename 123inner()…

Web安全研究(六)

文章目录 HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs文章结构Introjs obfuscationmethodologyExample HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs CCS 2019 CISPA 恶意软件领域&#xff0c;基于学习的系统已经非常流行&am…

AI论文速读 | 2024【综述】图神经网络在智能交通系统中的应用

论文标题&#xff1a;A Survey on Graph Neural Networks in Intelligent Transportation Systems 链接&#xff1a;https://arxiv.org/abs/2401.00713 作者&#xff1a;Hourun Li, Yusheng Zhao, Zhengyang Mao, Yifang Qin, Zhiping Xiao, Jiaqi Feng, Yiyang Gu, Wei Ju, …

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图&#xff1a; linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…

Web前端开发

一、概述 1.1 什么是HTML、CSS&#xff1f; 二、HTML 2.1 HTML快速入门 2.2 基础标签和样式 2.2.1 标题 &#xff08;1&#xff09;标题排版 输入&#xff01;加回车&#xff0c;直接生成HTML基本结构标签 。 <!-- 声明当前文档类型 --> <!DOCTYPE html> &l…