一、接口

二、多态

多态是同一个行为具有多个不同表现形式或形态的能力。

2.1 类型转换

转换方式

  • 隐式 向上转型

    • 对于基本数据类型,存储容量低的可自动向存储容量高的类型转换
    • 对于引用变量,子类可被转换为超类,可被赋给所属类实现的接口的引用
  • 显式 向下转型必须强制类型转换,是显示的 场合:赋值转换 方法调用转换 算术表达式转换 字符串转换

规则

基本类型的转换

将值从一种类型转换成另一种类型

引用变量的类型转换

将引用转换为另一种类型的引用,不改变对象本身的类型

转换方式

向上转型

  • 转换为任何一个(直接或间接)超类的类型
  • 转换为对象所属的类(或其超类)实现的一个接口

向下转型(唯一情况)

  • 被转为引用指向的对象的类型

向上转型(当一个引用被转为其超类的引用)后,通过它能够访问的只有在超类中声明过的方法。

2.2 方法调用绑定

多态存在的三个必要条件:

  • 继承/接口实现
  • 重写/接口方法实现
  • 父类引用指向子类对象/接口类型的引用指向了一个实现此接口的对象,即向上转型

简而言之,向上转型、继承、重写是三大前提条件

将一个方法调用同一个方法主体关联起来被称作绑定。若程序执行前进行绑定(如果有的话,由编译器和连接程序实现),叫做前期绑定。在运行时根据对象的类型进行绑定,叫做后期绑定或动态绑定。

在动态绑定中,对象中包含类的信息,编译器一直不知道对象的类型,但是方法调用机制能找到正确的方法体,并加以调用。

Java中的多态是通过方法的动态绑定机制实现的

只有普通方法调用可以是多态的,成员变量和静态方法都没有多态,直接访问某个域(成员变量),这个访问将在编译期进行解析,任何域访问操作都由编译器解析。

因此将属性设为private,不可直接访问属性,这里带来了一个好处,就是可以避免误以为父类引用能多态的使用子类的属性。

三、泛型

接口泛型

方法泛型

类泛型

泛型中的通配符

泛型中的限制

Java面向对象(二) 接口、多态和泛型的更多相关文章

  1. JavaSE入门学习21:Java面向对象之接口(interface)(二)

    一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...

  2. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  3. Java面向对象(接口、多态)

    面向对象 今日内容介绍 u 接口 u 多态 第1章 接口 1.1 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的 ...

  4. Java 面向对象之接口、多态

    01接口的概念 A:接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成 ...

  5. JAVA 面向对象中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  6. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  7. java面向对象--继承与多态

    可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...

  8. Java面向对象(二)

    面向对象(Object Oriented) Java支持面向对象三大特性:封装.继承.多态.(抽象)1.封装(Encapsulation)封装:隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用 ...

  9. Java面向对象㈡ -- 继承与多态

    Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...

随机推荐

  1. 源码编译安装Apache/2.4.37-------踩了无数坑,重装了十几次服务器才会的,不容易啊!

    1.先进入/usr/local/中创建三个文件夹 apr apr-util apache cd /usr/local目录 mkdir apr mkdir apr-util mkdir apache 2 ...

  2. 【转】Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)

    [转]Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128) ...

  3. flex 垃圾回收

    原文在这里:Garbage Collection with Flex and Adobe Air 我终于有时间来整理在flexcamp上演讲的东西并写篇博客了.就在flexcamp前一个月,我几乎天天 ...

  4. python练习题--计算总分平均分操作excel

    ''' 有一个存着学生成绩的文件,里面存的是json串,json串读起来特别不直观,需要你写代码把它都写到excel中,并计算出总分和平均分,json格式如下 { "1":[&qu ...

  5. MySQL Cluster 与 MongoDB 复制群集分片设计及原理

    分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...

  6. ES6标准入门 第二章:块级作用域 以及 let和const命令

    一.块级作用域 1.为什么需要块级作用域? ES5中只有全局作用域和函数作用域,带来很多不合理的场景. (1)内层变量可能会覆盖外层变量: var tem = new Date(); function ...

  7. Vuex模块:不开启命名空间

    模块不开启命名空间时,会共享全局命名空间. { state: { 模块1: "局部状态1", 模块2: "局部状态2" }, getters: { getter ...

  8. python函数及调用

    python的函数是一段重复多次可调用的代码,依据python的函数,我们可以利用函数式的编程,来减少代码的重复. 在本章节中,详细的介绍python的函数,以及python的函数式编程的与众不同,函 ...

  9. 【ABAP系列】SAP 读取生产订单 记入文档的货物移动明细

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 读取生产订单 记入文档的 ...

  10. vuer-cli 安装笔记

    电脑上装 的软件全卸载了.需要 重装 .整理了一下vue-cli脚手架搭建 1 先下载git 2 再下载node 3安装淘宝镜像 (https://npm.taobao.org/) 4 安装webpa ...