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(Windows)
百度云:链接:http://pan.baidu.com/s/1pKYrf79 密码:56t0 官网下载网址:http://archive.apache.org/dist/tomcat/tomca ...
- 如何更换织梦cms系统的网站小图标
织梦cms建站现在已经是很普遍的建站方式了,下面小编就分享一个简单的换网站小图标的方法! 一.登录自己网站的后台管理系统.在不修改织梦后台的情况下,默认的url是自己的网站后台dede目录下访问. 二 ...
- asn1学习笔记 约束
继续看asn1语法详解,今天主要看了约束部分,包含 1.单值约束,包含枚举类型 enumerated . 如: Two ::= INTEGER(2) Day ::= ENUMERATED { mond ...
- 实现一个Golang的reverse函数
Reverse函数,用来反转列表,本例子用golang实现,反转一个slice列表. 因为slice是引用类型,因此直接修改参数的值即可. func myReverse(l []string) { f ...
- Java匹马行天下之JavaWeb核心技术——JSP(续一)
十二.JSP表单处理 我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理.浏览器中使用 GET 和 POST 方法向服务器提交数据. GET 方法 GET方法将请求的编码信息添加在网 ...
- CF803D 题解
题面 正解:一道二分大水题! A:为什么我得不到满分? B : 评测的系统不一样啊! A : 蛤? 正常情况下我们日常练习均使用的是windows系统,在windows下,string 本身是可以存储 ...
- codeforces 371A K-Periodic Array
很简单,就是找第i位.i+k位.i+2*k位...........i+m*k位有多少个数字,计算出每个数出现的次数,找到出现最多的数,那么K-Periodic的第K位数肯定是这个了.这样的话需要替换的 ...
- Java编程思想之十七 容器深入研究
17.1 完整的容器分类方法 17.2 填充容器 import java.util.*; class StringAddress { private String s; public StringAd ...
- java在src/test/resourse下读取properties文件
package com.jiepu; import java.io.File; import java.net.URISyntaxException; import java.util.Map; im ...
- 自定义SWT控件四之其它下拉框
4.其它下拉框 4.1 添加联动二级多选择框(有添加按钮和删除按钮) package com.view.control.select; import java.util.ArrayList; impo ...