JAVA知识基础(十):多态

1.概述

1.1多态的定义
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
1.2多态的优点

  1. 消除类型之间的耦合关系
  2. 可替换性
  3. 可扩充性
  4. 接口性
  5. 灵活性
  6. 简化性
    1.3多态存在的三个必要条件
    继承
    重写
    父类引用指向子类对象

2.多态的实现方式

方式一:重写:
这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)。
方式二:接口

  1. 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
  2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。具体可以看 java接口 这一章节的内容。

方式三:抽象类和抽象方法
https://blog.csdn.net/weixin_45187434/article/details/106320376

3.向上转型&向下转型

向上转型:多态本身是子类类型向父类类型向上转换的过程,其中,这个过程是默认的。你可以把这个过程理解为基本类型的小类型转大类型自动转换,不需要强制转换。 当父类引用指向一个子类对象时,便是向上转型。 向上转型格式:

父类类型 变量名 = new 子类类型(); 如:Father f= new Son();

向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。同样可以把这个过程理解为基本类型的自动转换,大类型转小类型需要强制转换。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,向下转使用格式:

Father father = new Son();
子类类型 变量名 = (子类类型) 父类变量名; 如:Son s =(Son) father;

4.例题

package Polymorphic;
//爷爷类
class Ye {public String show(Sun obj) {return ("Ye and Sun");}public String show(Ye obj) {return ("Ye and Ye");}}
//爸爸类
class Fu extends Ye {public String show(Fu obj) {return ("Fu and Fu");}public String show(Ye obj) {return ("Fu and Ye");}
}
//儿子类
class Zi extends Fu {}
//孙子类
class Sun extends Fu {}
public class PolymorphicTest {public static void main(String[] args) {Ye y = new Ye();Ye y2 = new Fu(); //向上Fu f = new Fu();Zi z = new Zi();Sun s = new Sun();System.out.println("第一题 " + y.show(f));System.out.println("第二题 " + y.show(z));System.out.println("第三题 " + y.show(s));System.out.println("第四题 " + y2.show(f)); System.out.println("第五题 " + y2.show(z));System.out.println("第六题 " + y2.show(s));System.out.println("第七题 " + f.show(f));System.out.println("第八题 " + f.show(z));System.out.println("第九题 " + f.show(s));}
}

4.例题答案

第一题 Ye and Ye
第二题 Ye and Ye
第三题 Ye and Sun
第四题 Fu and Ye
第五题 Fu and Ye
第六题 Ye and Sun
第七题 Fu and Fu
第八题 Fu and Fu
第九题 Ye and Sun

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MIP技术交流分享(3月9日)

3月9日上周四下午,MIP 团队工程师与去哪儿酒店云、众荟的 Web 前端工程师进行了一次面对面的技术交流。 在这次交流中,MIP 工程师主要分享了 MIP 技术原理,MIP 加速原理,以及 MIP 为开发者提供的工具集。去哪儿的工程师也提出了通…

JAVA知识基础(十一):异常

1.异常的概念 简单说就是不正常运行,最终导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不…

SpringBoot基础篇(一):Spring Boot入门

我们今天开始对SpringBoot的学习,本篇主要是Spring Boot的入门部分。 1、SpringBoot简介 引用SpringBoot在百度百科中的含义: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使…

SpringBoot基础篇(二):HelloWorld细节探究

1、场景启动器 1.1依赖 <!--Hello World项目的父工程是org.springframework.boot--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</versio…

MIP 与 AMP 合作进展(3月7日)

“到目前为止&#xff0c;全网通过 MIP 校验的网页已超10亿。除了代码和缓存&#xff0c; MIP 还想做更多来改善用户体验移动页面。” 3月7日&#xff0c;MIP 项目负责人在首次 AMP CONF 上发言。 那么 MIP 和 AMP 的关系是什么呢&#xff1f; AMP 是一个开源性项目&#xff…

SpringBoot番外篇(一):使用Spring Initializer快速创建Spring Boot项目(IDEA版)

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目&#xff1b; 选择我们需要的模块&#xff1b;向导会联网创建Spring Boot项目&#xff1b; ps:需要联网 1、创建新项目时选择Spring Initializ&#xff0c;选择好java版本&#xff0c;点击next。r 2、填写项…

开发教程(四) MIP组件平台使用说明

组件审核平台用于上传 MIP 组件。经过自动校验之后&#xff0c;提交审核&#xff0c;通过审核的组件会定时推送到线上&#xff0c;供网站使用。 平台地址&#xff1a;https://www.mipengine.org/platform/ 1. 使用说明 MIP 组件审核平台用于提交开发完成的组件&#xff0c;如…

MIP 技术交流分享(3月15日)

3月15日下午&#xff0c;MIP 团队工程师与58赶集的 Web 前端工程师进行了一次面对面的技术交流。 在这次交流中&#xff0c;MIP 工程师主要分享了 MIP 技术原理&#xff0c;MIP 加速原理&#xff0c;以及 MIP 为开发者提供的工具集。 58赶集的工程师提出了以下问题&#xff1a…

Redis(零):背景

什么是NoSQL&#xff0c;什么是Redis&#xff0c;我们在了解这个系列之前&#xff0c;先来看一下Redis是从何而来&#xff1f;Why redis is needed? 1、单机MySQL年代 在最早的单机MySQL年代&#xff0c;存在着访问量小&#xff0c;单个数据库等特点。 但是特有着众多的缺…

Redis(一):什么是NoSQL与NoSQL分类

1、什么是NoSQL NoSQL Not only SQL (不仅是SQL)&#xff0c;即泛指非关系型数据库。随着Web2.0时代诞生&#xff01;NoSQL在当今大数据的环境下发展十分迅速&#xff01; NoSQL 是一项全新的数据库革命性运动&#xff0c;早期就有人提出&#xff0c;发展至2009年趋势越发高涨…

MIP 内容声明

从搜索结果页点出的 MIP 页面&#xff0c;其页面上的任何内容&#xff08;包括但不限于广告、在线咨询、统计等组件&#xff09;均视为在原站点上的投放和使用。 MIP &#xff08;Mobile Instant Pages - 移动网页加速器&#xff09;, 是一套应用于移动网页的开放性技术标准。…

Redis(二):Redis入门与性能测试

1、Redis概述 Redis是什么&#xff1a; Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 免费开源&#xf…

互联网的发展背离了其初衷吗?

作者 | 高磊 编辑 | 尾尾 一、互联网初衷究竟是什么&#xff1f; 互联网的初衷究竟是什么&#xff1f; 对于这个问题&#xff0c;被誉为“互联网之父”的蒂姆伯纳斯李&#xff08;Tim Berners-Lee&#xff09;应该最有发言权。 伯纳斯李认为&#xff0c;互联网最具价值的地…

Redis(三):Redis基础知识与常用命令

1、基础命令 Redis默认有16个数据库&#xff0c;用的是第0个数据库&#xff0c;可以使用select进行切换数据库&#xff0c;使用DBSIZE查看DB大小&#xff08;只针对当前数据库&#xff09;。 使用keys * 查看当前数据库下所有的key&#xff0c;使用flushdb清除当前数据库&am…

移动Web加速技术月报第1期

作者 | Brilliant Open Web团队breezet、JennyL 编辑 | 尾尾 为推进Web技术的发展&#xff0c;Brilliant Open Web 团队特推出每月一期的《移动Web加速技术月报》&#xff0c;该月报将整理较流行的移动Web加速技术&#xff0c;并跟进各项技术的进展和发展方向&#xff0c;以期…

Redis(四):String字符串数据类型详解

Redis 字符串数据类型的相关命令用于管理 redis 字符串值&#xff0c;基本语法如下&#xff1a; redis 127.0.0.1:6379> COMMAND KEY_NAME1、String类型的常用命令 1.1、set、get SET key v//设置key值为v get key //获取key值1.2、Append APPEND key "hi" //…

五个案例简述Web设计原则:通用一致

作者 | 百度搜索用户体验中心 《Web设计指南》分为设计原则、基础规范两方面主要内容&#xff0c;同时会提供相应的实际案例及资源下载。欢迎关注OpenWeb开发者&#xff0c;订阅《Web设计指南》。 前言 《Web设计指南》是专门为广大Web内容生态提供一套简单实用的设计指南&a…

Redis(五):List集合数据类型详解

Redis列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff09;或者尾部&#xff08;右边&#xff09; 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 实例&#xff1a; redis 127…

WebP 在减少图片体积和流量上的效果如何?WebP 技术实践分享

作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端&#xff0c;图片一直占据着页面流量的大头&#xff0c;在图片的大小和质量之间如何权衡&#xff0c;成为了长期困扰开发者们的问题。而 WebP技术的出现&#xff0c;为解决该问题提供了好的方案。本文将为大家详细介绍 WebP 技…

Redis(六):Set集合数据类型详解

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的&#xff0c;这就意味着集合中不能出现重复的数据。 Redis 中集合是通过哈希表实现的&#xff0c;所以添加&#xff0c;删除&#xff0c;查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集…