Java基础之多态和泛型浅析
Java基础之多态和泛型浅析
一、前言:
楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结
二、什么是多态?
三、什么是泛型?
为什么要使用泛型?
在Java5之前,泛型程序设计是用继承实现的。例如ArrayList类只维护一个Object引用的数组:
//before generic classes
public class ArrayList {
private Object[] elementData;
...............
public Object get(int i) {.......}
public void add(Object object) {.........}
}
这种方法有两个问题,当获取一个值时必须进行强制类型转换
ArrayList files = new ArrayList();
.......................
String fileName = (String)files.get(0);
此外,这里没有错误检查。可以向数组列表中添加任何类的对象。
files.add(new File("......"));
对于这个调用,编译和运行都不会出错。然而在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误。泛型提供了一个更好的解决方案:
Java5以后,ArrayList有一个类型参数来指定元素的类型:
ArrayList<String> files = new ArrayList<String>();(在Java7及以后的版本中,构造函数中可以省略泛型类型:ArrayList<String> files = new ArrayList<>();)
这显然使得代码具有更好的可读性。人们一看这个数组列表中包含的是String对象。
三、多态与泛型的区别:
其实多态和泛型也没有什么根本的区别,如果非要说说区别,那就说说吧:
泛型和多态比较容易混淆, 简单来说:泛型就是类型参数化, 好处是编译器会检查参数类型.多态就是多个类由继承(实现接口)得到的一致外观, 好处是简化代码, 隔绝修改实际上泛型和多态没有直接关系, 使用泛型在代码中就能按照指定类型的外观操作对象.
比较常用的泛型类型就是List<T>和Map<T, T>, 说个简单的例子吧:
List<String> list = ....; //具体类型, 就跟多态没什么关系了
for (String str : list) {
System.out.println(str.substring(1));
}
List<Animal> list = ...; //地球上但凡讲OO的都拿这个说事儿... 成员就是小猫小狗狮子老虎什么的
for (Animal animal : list) {
animal.say(); //喵, 汪....., 多态
}
多态可以分为编译时多态和运行时多态,泛型是对类型的抽象,属于编译时多态。
比如说下面的私有字段x, 它的数据类型在编译的时候是动态决定的,具有多态性。
class A<T>{ private T x;} A<string> a = new A<string>();
多态还可以分为:行为多态和属性多态。
下面的p在给它赋值前是不知道它的性别的,在给它赋不同的值的时候就表现出属性多态了。
与此同时,也具有了行为的多态, Walk().男人和女人走路的方式是不一样的,所以是多态了。
基类: Class Person, public virtual method Walk() {}
子类: Man, Woman
Person p = new Man();
Person p = new Woman();
转载请注明出处,谢谢!
Java基础之多态和泛型浅析的更多相关文章
- Java基础之Collection与Collections浅析
Java基础之Collection与Collections浅析 一.前言: 位于Java.util包下的Collection与Collections都是Java中重要的工具类,它们都是Java集合框架 ...
- Java基础十一--多态
Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. /* 对象的多态性. class 动物 {} class 猫 ...
- Java基础语法<十二> 泛型程序设计
1 意义 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用. 常见应用 : ArrayList 2 K T V E ? object等的含义 类型变量使用大写形式 E – Element ( ...
- 【Java基础】多态
首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...
- Java基础之十五 泛型
第十五章 泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大. 在面对对象编程语言中,多态算是一种泛化机 ...
- Java基础之浅谈泛型
简单的介绍了Java泛型类型的使用.上手容易,深入很难.
- 【java基础学习】-【泛型】
参考以下几位同学的总结来学习: http://www.cnblogs.com/lwbqqyumidi/p/3837629.html#!comments http://www.weixueyuan.ne ...
- java基础之 多态
在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP.这也是为什么有人说,使用面向对象语言 ...
- 黑马程序员——JAVA基础之多态与Object
------- android培训.java培训.期待与您交流! ---------- 多态 : 多态定义: 某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象. ...
随机推荐
- Tomcat(Linux)
百度云:链接:http://pan.baidu.com/s/1o7MNTJc 密码:cfof 官方下载网址:http://archive.apache.org/dist/tomcat/tomca ...
- apache bench的简单使用
ApacheBench是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可以同时模拟多个并发请求. 需要针对web做压力测试,所以简单学习了一 ...
- 大型系列课程之-七夕告白之旅Electron篇
上一篇分享了一下vbs的撩妹攻略,但细心的兄弟会发现,这种脚本式的攻城方案并不得心应手,有很多妹子害怕是病毒根本不敢点击,而且这个脚本界面风格也不漂亮,不能轻易打动妹子的心,怎么破,小编这次在为各位老 ...
- Broadcast 使用详解
极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以 ...
- Redhat 离线安装 Docker (Community from binaries)
需求 在离线环境安装Docker (Community版),因为Enterprise版要花钱.当然资金充裕的客户可参考https://docs.docker.com/install/linux/doc ...
- linux环境下搭建自动化Jenkins管理工具
一.搭建一个jak--tomcat服务器到自己的linux服务器上 具体的服务器搭建这里可以参考华华大佬的博客:https://www.cnblogs.com/liulinghua90/p/46614 ...
- alluxio源码解析-rpc调用概述-client和worker之间的block模块的通讯架构(netty版本)(3)
(1.8版本)client和worker之间的block模块的通讯架构 block作为alluxio文件读取或者存储的最小基本单位,都是通过BlockOutStream和BlockInputtream ...
- Spring入门(七):Spring Profile使用讲解
1. 使用场景 在日常的开发工作中,我们经常需要将程序部署到不同的环境,比如Dev开发环境,QA测试环境,Prod生产环境,这些环境下的一些配置肯定是不一样的,比如数据库配置,Redis配置,Rabb ...
- ZooKeeper系列(五)—— ACL 权限控制
一.前言 为了避免存储在 Zookeeper 上的数据被其他程序或者人为误修改,Zookeeper 提供了 ACL(Access Control Lists) 进行权限控制.只有拥有对应权限的用户才可 ...
- spring cloud 断路器 Hystrix
一.微服务架构中使用断路器的原因 二.代码实现 1.在Ribbon中使用短路器 1.1.引入依赖 <dependency> <groupId>org.springframewo ...