在之前的文章我们介绍了一下 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. 【Stream—6】BufferedStream相关知识分享

    一.简单介绍以下BufferedStream 在前几章的讲述中,我们已经能够掌握流的基本特性和特点,一般进行对流的处理时,系统肩负着IO所带来的开销,调用十分频繁,这时候就应该想个办法减少这种开销,而 ...

  2. pwnable.kr 第一天

    1.FD 直接通过ssh连接上去,然后,看下源代码. #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  3. ES6面向对象实现tab栏切换效果

    面向对象实现tab栏切换效果

  4. css三大特效之优先级

    1.什么是优先级作用:当多个选择器选中同一个标签,并且给同一个标签设置相同的属性时,如何层叠就由优先级来确定

  5. .NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏

    目       录 1.      概述... 2 2.      演示信息... 2 3.      简单介绍... 3 4.      产品特点... 4 5.      价值体现... 5 1. ...

  6. 【数据结构】之二叉树(Java语言描述)

    有关树的一些基础知识点请参考[这篇文章]. 本文主要记录Java语言描述的二叉树相关的一些操作,如创建.遍历等. 首先,我们需要一个表示树中节点的数据结构TreeNode,代码如下: public c ...

  7. Centos 7.x 系统基础优化

    Centos 7.x 系统基础优化 1.更换国内yum源 删除系统带的centos官方yum源 rm -rf /etc/yum.repos.d/* 使用国内阿里云源 curl -o /etc/yum. ...

  8. plot()与dev 函数族的使用

    1. plot()的类型选择 plot()函数,属于graphics包中. plot(a,b,type="value") type:以什么样的形式来画a,b之间的关系: ·&quo ...

  9. 阿里云安装mysql

    1. ##数据库字符集SHOW VARIABLES LIKE 'character_set_%'; ##数据库校对股则SHOW VARIABLES LIKE 'collation_%'; 2.创建数据 ...

  10. 第九次作业——DFA最小化,语法分析初步

    老师:MissDu 提交作业 1.将DFA最小化:教材P65 第9题 答: 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是 ...