在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态。

在日常生活中,很多意思并不是我们想要的意思,如下:

1、领导:“你这是什么意思?”

小明:“没什么意思,意思意思。”

领导:“你这就不够意思了。”

小明:“小意思,小意思。”

领导:“你这人真有意思。”

小明:“其实也没有别的意思。”

领导:“那我就不好意思了。”

小明:“是我不好意思。”

2、电视剧《快把我哥带走》

妹:“你根本就不懂我。”

哥:“你不说我怎么懂你啊,”

妹:“真的懂不需要说出来,”

哥:“你说了我不就懂了吗?”

妹:“说出来有什么意思啊,我不说你也应该懂。”

哥:“我又不是算命的,我知道你几个意思啊,”

妹:“我没什么意思,”

哥:“确实没什么意思。”

妹:“现在我说话你觉得没意思了吗?”

哥:“是我说没意思?”

妹:“那我说没意思,就是没意思嘛?”

哥:“那你倒是告诉我你到底几个意思啊。”

。。。

对于不同的职业,当我们听到不同的词时也会想到不同的意思,比如 cut,对于医生来说就是动刀做手术,对于裁缝来说就是裁剪衣服,对于演员来说就是暂停表演,这就是多态作为行为的一种表现,还有当我们听到水这个对象时,作为业态可以洗脸,作为固态可以降温,作为气态可以蒸馒头,这就是多态作为对象的一种表现。

多态:

1、意义

  1)同一类型的引用指向不同的对象时,有不同的行为 ----- 行为的多态。

  2)同一对象被造型为不同的类型时,有不同的表现 ----- 对象的多态。

2、向上造型:

  2.1)父类型的引用指向子类的对象

  2.2)能造型成的类型有:父类型、实现的接口。

  2.3)能点出来什么,看引用的类型

3、强制类型转换,成功的条件有两个:

  3.1)引用所指向的对象,就是该类型

  3.2)引用所指向的对象,实现了改接口

4、通过 instanceof 来判断引用是否是某种类型,instanceof 返回 boolean 结果,强转成功的条件时它为 true 的条件。

 abstract class people {
abstract void cut();
} class doctor extends people {
void cut() {
} // 做手术
} class actor extends people {
void cut() {
} // 停止表演
} class barber extends people {
void cut() {
} // 理发
}

在上面的代码中,我们其实就是做了一个行为多态的代码,对于不同类型的人来说,cut() 方法具有不同的行为。

 interface yetai { // 液态接口
void xilian();
} interface gutai { // 固态接口
void jiangwen();
} interface qitai {
void zhengmantou(); // 气态接口
} class water implements yetai, gutai, qitai {
public void xilian() {
} public void jiangwen() {
} public void zhengmantou() {
}
}

在上面的代码中,我们创建了液态,气态,固态三个接口,并且每个接口都有各自的方法,然后我们通过各自的接口实例化 water,可以看出不同接口可以实现各自的 water 实例,但是并不能去访问另一个实例里的方法,这就是 同一对象被造型为不同的类型时,有不同的表现,但是如果我们非要调用其他接口里的方法呢,比如在上面的代码中我们非要让 yetai 的 water 具有 jiagwen 功能,当然在实际生活中确实有这样的功能,

我们可以通过强制类型转换的方法来实现上面的问题。如下:

 public class HelloWorld {
public static void main(String[] args) {
yetai water = new water();
gutai water1 = (gutai) water;
water1.jiangwen();
}
} interface yetai { // 液态接口
void xilian();
} interface gutai { // 固态接口
void jiangwen();
} interface qitai {
void zhengmantou(); // 气态接口
} interface qitai1 {
void zhengmantou(); // 气态接口
} class water implements yetai, gutai, qitai {
public void xilian() {
} public void jiangwen() {
} public void zhengmantou() {
}
}

我们通过 gutai water1 = (gutai) water;  将 yetai water 强转为 gutai water ,这样就可以实现 jiangwen 功能了。

Java 从入门到进阶之路(十五)的更多相关文章

  1. Java 从入门到进阶之路(五)

    之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...

  2. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  3. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  4. Java 从入门到进阶之路(十四)

    在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...

  5. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...

  6. Java 从入门到进阶之路(十九)

    在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...

  7. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  8. Java 从入门到进阶之路(二十二)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...

  9. Java 从入门到进阶之路(十八)

    在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...

随机推荐

  1. vue在移动端实现复制数值到剪贴版

    实现按键就指定内容复制到设备的剪贴版,这里是复制快递单号 html <div slot="footer" v-if="express.number" st ...

  2. python requirements.txt的创建及使用

    要求文件(requirements.txt)是安装包的依赖项及版本的记录文件. pip: 创建 (venv) $ pip freeze >requirements.txt 使用 (venv) $ ...

  3. 2019-9-11:渗透测试,基础学习,VMware安装centos 7

    VMware Workstation 15 Pro 安装Centos 7,详细图文步骤 1,点击VMware菜单栏的“文件”-->“新建虚拟机”,选择“典型”使用向导创建虚拟机,点击“下一步” ...

  4. Stream系列(七)distinct方法使用

    EmployeeTestCase.java package com.example.demo; import lombok.Data; import lombok.ToString; import l ...

  5. jquery浅复制和深复制区别

    jquery浅复制和深复制区别

  6. Git同步本地项目文件到github

    1.登录自己的github账号,并创建一个存放项目代码的仓库 输入仓库名称后,点击create,然后来到完成后的页面,copy下以下内容,后面会用到 2.打开本地的git 安装好git后,打开git的 ...

  7. Java 虚拟机结构

    一 数据类型 与 Java 程序语言中的数据类型相似,Java 虚拟机可以操作的数据类型可分为两类:原始类型(Primitive Types,也经常翻译为原生类型或者基本类型)和引用类型(Refere ...

  8. pngquant——一个好用的png压缩工具

    一个可以进行有损图片压缩的命令行工具和代码库. 网址:https://pngquant.org/ 1.为什么选择pngquant 传说中的神器——tinyPng 我们现在用的工具——ImageAlph ...

  9. kubectl exec 在kubelet中的处理流程

    基于kuebrnetes v1.17 简单来说,一个完整的streaming请求如下: 客户端 kubectl exec -i -t ... kube-apiserver 向 Kubelet 发送流式 ...

  10. 【我的物联网成长记8】超速入门AT指令集【华为云技术分享】

    [摘要] 在物联网中,AT命令集可用于控制&调测设备.通信模块入网等.本文为您介绍NB-IoT常用的AT命令集及其调测工具. 什么是AT指令集 AT命令,用来控制TE(Terminal Equ ...