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 的条件。

 1 abstract class people {
 2     abstract void cut();
 3 }
 4
 5 class doctor extends people {
 6     void cut() {
 7     } // 做手术
 8 }
 9
10 class actor extends people {
11     void cut() {
12     } // 停止表演
13 }
14
15 class barber extends people {
16     void cut() {
17     } // 理发
18 }

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

 1 interface yetai { // 液态接口
 2     void xilian();
 3 }
 4
 5 interface gutai { // 固态接口
 6     void jiangwen();
 7 }
 8
 9 interface qitai {
10     void zhengmantou(); // 气态接口
11 }
12
13 class water implements yetai, gutai, qitai {
14     public void xilian() {
15     }
16
17     public void jiangwen() {
18     }
19
20     public void zhengmantou() {
21     }
22 }

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

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

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         yetai water = new water();
 4         gutai water1 = (gutai) water;
 5         water1.jiangwen();
 6     }
 7 }
 8
 9 interface yetai { // 液态接口
10     void xilian();
11 }
12
13 interface gutai { // 固态接口
14     void jiangwen();
15 }
16
17 interface qitai {
18     void zhengmantou(); // 气态接口
19 }
20
21 interface qitai1 {
22     void zhengmantou(); // 气态接口
23 }
24
25 class water implements yetai, gutai, qitai {
26     public void xilian() {
27     }
28
29     public void jiangwen() {
30     }
31
32     public void zhengmantou() {
33     }
34 }

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

原文地址:https://www.cnblogs.com/weijiutao/p/11847231.html

时间: 2024-10-08 04:14:14

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

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

在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时候不用去考虑它到底能不能插进去,只要型号对了就肯定能插进去,接口就相当于一个标准,你要想把鼠标插到我的电脑上,在出厂时就必须遵守该电脑定义的接口标准. 在 Java 中同样有接口的概念,当然也会有接口的定义标准. 1.有 interface 定义: 2.只能包含常量和抽象方法: 3.接口不能被实例化

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

在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更突出,因为 Java 就是一门面向对象的编程语言. 我们先来看下面的代码: 1 public class Main { 2 public static void main(String[] args) { 3 Person person = new Person(); 4 // person.age

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

在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,char,boolean,是以值的形式存在的,所以他们并没有面向对象的特征,自然也不继承自 Object,所以不能使用多台,用 Object 的角度去接受基本类型. 假设现在我们有一个计算 1+1 的值,代码如下: 1 public class Main { 2 public static void m

Java 从入门到进阶之路(三)

之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样.下表列出了所有的算术运算符. 表格中的实例假设整数变量A的值为10,变量B的值为20: 操作符 描述 例子 + 加法

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

之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的要素: - 循环变量的初始化 - 循环条件(以循环变量为基础) - 循环变量的改变(向着循环的结束进行改变) Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环 while 循环 while是最基本的循环,它的结构为: while(布尔表达式){ //循环内容

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

在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法. 我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0.如下: 1 public class HelloWorld { 2 public static void main(String[] args) { 3 User e = new User(); // 创建一个 User 对象 4 e.print(); // 姓名:null 年龄:0 性别:null

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

之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这时候我们就要对类方法进行重写,如下: 1 public class HelloWorld { 2 public static void main(String[] args) { 3 Student student = new Student(); 4 student.name = "张三"

Python 爬虫从入门到进阶之路(五)

在之前的文章中我们带入了 opener 方法,接下来我们看一下 opener 应用中的 ProxyHandler 处理器(代理设置). 使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的. 很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问. 所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取. urllib.request 中通过ProxyHandler来设置使用代理服

MySQL快速入门(一)—Java进阶学习第十五天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.09 lutianfei none 数据库简介 什么是数据库 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据. 关系型数据库 存储的都是实体与实体之间的关系. ER模型图 常见的数据库 Oracle : 甲骨文公司的数据库产品,大型的收费的数据库. SQLServer : 微软公司的数据库产品,中型的收费的数据库. MySQL : 是开源的,免费的数据库产品.在5.x版本是免费的,6.x是