在之前的文章我们介绍了一下 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. Linux线上与本地的httpd搭建【制作本地yum源】

    当前时间 2019-10-24-10:53:12 制作本地yum源 我用的VMware Workstation 系统环境: CentOS 7.5 首先我们先要挂载系统镜像 [root@laopa ~] ...

  2. python2的编码问题小结

    对于python2,经常会遇到编码问题,在此小记一下. Python2默认的编码解码方式是ascii码,这点要牢记. windows系统默认是gbk编码的,可以使用chcp查看:936,那就是GBK简 ...

  3. 微调(Fine-tune)原理

    在自己的数据集上训练一个新的深度学习模型时,一般采取在预训练好的模型上进行微调的方法.什么是微调?这里已VGG16为例进行讲解,下面贴出VGGNet结构示意图. 上面圈出来的是VGG16示意图,也可以 ...

  4. Centos7 搭建LAMP环境(编译安装)

    1.查看系统版本 [niemx@localhost ~]$ cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 2.安装软件准备 ...

  5. pycham永久激活及conda环境部署

    1.pycham安装 一般不选择最新版本,我用的是2018.3,选择 Professional专业版 1.1 官网地址: https://www.jetbrains.com/pycharm/downl ...

  6. GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!

    大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻... 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚.当时一方面是因为菜,看着这种全是 ...

  7. 【搞定面试官】谈谈你对JDK中Executor的理解?

    ## 前言 随着当今处理器计算能力愈发强大,可用的核心数量越来越多,各个应用对其实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行.在此背景下,Java自JDK1.5 提供了自己的多线程框架 ...

  8. 【转】Pandas常见用法总结

    关键缩写和包导入 在这个速查手册中,我们使用如下缩写: df:任意的Pandas DataFrame对象 s:任意的Pandas Series对象 raw:行标签 col:列标签 引入响应模块: im ...

  9. VS Code实现markdown画流程图

    安装最新的vscode编辑器,原生支持markdown语法.不会markdow的人可以去好好学下,写文档神器!!! 1.安装Markdown Preview Enhanced插件 2.本地新建test ...

  10. 2019牛客暑期多校训练营(第二场)J.Subarray

    题意:给你一个n 表示有n段连续的1序列 现在问你 在总长度为0~1e9-1的范围内有多少个大于0的子段 思路:假设我们统计了当前的前缀和 我们显然可以用树状数组维护一下前缀和 这样我们可以nlogn ...