Map是HashMap的父类,第一种声明方式是:父类的引用指向子类的对象,是多态的一种表现形式;第二种是:使用本身引用。举个例子:

第一种声明方式是实现了多态,多态后就可以写出一段所有子类都通用的代码,当添加新的子类时,这段代码是不需要修改的。

比方说:父类Animal,子类Cat,Dog

//如果使用第2行,当改用Dog的时候,那么第3行也需要改变

1 Animal a = new Cat();

2 //Cat a = new Cat();

3 a.someMethod();

父类的引用指向子类的对象的好处:多态、动态链接,向上转型。

方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。

理解多态,首先要知道“向上转型”。

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过

Cat c = new Cat();

实例化一个Cat的对象,这个不难理解。但当我这样定义时:

Animal a = new Cat();

这代表什么意思呢?

很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。这就是“向上转型”。

那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,父类引用是无法调用的;

那什么是动态链接呢?当父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

java+map申明_Java中两种HashMap申明方式区别?相关推荐

  1. java ftp 教程_Java 中两种ftp操作方式

    最近看到几篇关于java中操作ftp的文章,所以想写一个总结贴,标记一下,方便以后应用. 首先,我们可以应用java中的ftp库,java中提供了一个ftpclient的类,提供了很多操作ftp的方法 ...

  2. Java中两种抛出异常的方式

    Java中两种抛出异常的方式 在Java中有两种抛出异常的方式,一种是throw,直接抛出异常,另一种是throws,间接抛出异常. 直接抛出异常是在方法中用关键字throw引发明确的异常.当thro ...

  3. java map遍历_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  4. java B锁_Java中15种锁的介绍

    原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...

  5. java string封装类_java中八种基本数据类型以及它们的封装类,String类型的一些理解...

    在我们面试或者考试过程中经常会考到八种基本数据类型以及它们的封装类,那么有哪八种基本数据类型呢?它们的封装类又是什么呢? 首先,八种基本数据类型分别是:int.short.float.double.l ...

  6. java默认值_Java中八种基本数据类型的默认值

    通过一段代码来测试一下 8种基本数据类型的默认值 package dierge; public class Ceshi { int a; double b; boolean c; char d; fl ...

  7. java乘法表_Java中四种9*9乘法表的实现方式(附代码)

    前言: 初学java,实现99乘法表是必学必会的内容. 需求 : 分别写出上下左右,对应四个角的乘法表. 思路: 可以先打印出*星星,形成一个直角三角形,然后再替换成乘法公式. 代码如下: publi ...

  8. java list翻转_JAVA实现两种方法反转单列表

    /***@authorluochengcheng * 定义一个单链表*/ classNode {//变量 private intrecord;//指向下一个对象 privateNode nextNod ...

  9. java循环遍历_JAVA中循环遍历list有三种方式

    转自:https://blog.csdn.net/changjizhi1212/article/details/81036509 JAVA中循环遍历list有三种方式for循环.增强for循环(也就是 ...

最新文章

  1. 多分辨率适配—字体大小适配 sp与dp区别
  2. 获取Json中特定的值
  3. android源代码
  4. .NET点滴:SpanT
  5. BGP——OSPF与BGP协议联动(出现问题+解决方案配置)
  6. php fs 上传文件,PHP操作GridFS存储文件到MongoDB的三种方式
  7. RabbitMQ的深入理解和最简单的用途说明
  8. VueJS样式绑定:v-bind
  9. 20191015:基数排序法
  10. ‘gbk‘ codec can‘t decode byte 0xb9 in position 58: illegal multibyte sequence
  11. ResNet网络结构详解及代码复现
  12. 云开发之模糊搜索的三种方式
  13. 模电 2个NPN管组成的恒流源电路分析
  14. 通过session实现通用爬虫--爬取到开心网账户的首页界面
  15. linux下最简单的端口转发工具rinetd实现端口转发
  16. 房地产业务学习 04 -房企信息化 谁忽悠了谁
  17. linux 计价软件,思谷电话计费系统Linux版免费版_思谷电话计费系统Linux版官方下载_思谷电话计费系统Linux版5.1-华军软件园...
  18. python3个引号啥意思_Python中单引号,双引号,3个单引号及3个双引号的区别
  19. Spring项目整合WebService服务遇到问题记录
  20. C++面试题(一)——基础概念篇

热门文章

  1. Codeforces Round #401 (Div. 2) C Alyona and Spreadsheet —— 打表
  2. HTML5有哪些表单新特性
  3. LWP 轻量级线程的意义与实现
  4. C# 给自己写的软件,加注册码功能。
  5. 少了unicon-tools是不行滴
  6. 58 - 算法 -分治问题 - 循环 二分查找 OpenJudge 百练 4143和为给定数
  7. html 说明文档样式,通用模板说明文档
  8. php lpop 返回null,数据库读取数据返回 null 怎么办?
  9. python grpc 并发_python中grpc的使用示例
  10. 枚举算法:求解不等式