Java 从入门到进阶之路(十五)
在之前的文章我们介绍了一下 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 从入门到进阶之路(十五)的更多相关文章
- Java 从入门到进阶之路(五)
之前的文章我们介绍了 Java 的循环结构,本章我们来看一下 Java 的数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. 数组 - 相同数据类型的元 ...
- Java 从入门到进阶之路(十)
之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...
- Java 从入门到进阶之路(十二)
在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...
- Java 从入门到进阶之路(十四)
在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...
- Java 从入门到进阶之路(十六)
在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...
- Java 从入门到进阶之路(十九)
在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...
- Java 从入门到进阶之路(二十)
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...
- Java 从入门到进阶之路(二十二)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...
- Java 从入门到进阶之路(十八)
在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...
随机推荐
- 《算法导论中文版》PDF 下载
电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 在有关算法的书中,有一些叙述非常严谨,但不够全面:另一些涉及了大量的题材,但又缺乏严谨性.本书将严谨性和全面性融为 ...
- Alibaba Nacos 学习(四):Nacos Docker
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
- 学习Python第一天:找了4本专属小白的书籍(前期入门打基础)
我们提供一个初学者最好的Python书籍列表.Python是一个初级程序员可以学习编程的最友好语言之一.为了帮助您开始使用Python编程,我们分享此列表.泡一杯茶,选一本书阅读,开始使用Python ...
- jquery操作css样式的方法
jquery操作css样式的方法(设置和获取)
- windows安装Pytorch报错:from torch._C import * ImportError: DLL load failed: 找不到指定的模块”解决方案
问题描述 python环境下安装cpu版本pytorch,安装成功,但是导入出错. 报错如下 解决方法 参考博客,大家解决方法大概有:升级numpy.添加.dll文件到环境变量,均没有成功.本地pyt ...
- DVWA学习之SQL注入
DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...
- ES6之Set
阮大神的es6看了一遍,但是对于Set和Map还是一知半解的,主要还是没怎么用吧,这里总结一下,以后再工作中也要多用用才行 怎么定义set呢?有什么用处? set是ES6中新增的类型,和数组类似,唯一 ...
- SpringMVC 请求/响应乱码问题解决方案
请求乱码解决之get乱码问题 GET请求乱码原因分析 GET请求参数是通过请求行中的URL发送给Web服务器(Tomcat)的. Tomcat服务器会对URL进行编码操作(此时使用的是Tomcat设置 ...
- JS使用readAsDataURL读取图像文件
JS使用readAsDataURL读取图像文件 FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL.Data URL是一项特殊的技术,可以将资料(例如图片 ...
- 安装PHP5和PHP7
5月25日任务 课程内容: 11.10/11.11/11.12 安装PHP511.13 安装PHP7php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn. ...