学【Java多态】-- 写高质量代码

 多态的实现条件

在java中要实现,必须要满足如下几个条件,缺一不可。

  • 1.必须在继承体系下
  • 2.子类必须要对父类中的方法进行重写
  • 3.通过父类的引用调用冲写的方法。 

 想要真正的学好多态需要去学习一些前置知识,那我们直接开始吧!

重写 

重写:也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

【重写的规则】

  •  子类在重写父类的方法时,返回值,方法名,参数列表,要保持完全一致。
  •  访问权限不能比父类中被重写的方法的访问权限更低。
  •  父类被static、private修饰的方法、构造方法都不能被重写。
  • 重写方法可以使用,@Override 注解来显式指定,相当于多一层编译器校验。

【重写和重载的区别】
 

 动态绑定与静态绑定 

 静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。

动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法

向上转型 

向上转型简单来说就是把子类对象给父类。

实际就是创建一个子类对象,将其当成父类对象来使用

语法格式

 这两行代码可以简化成一行代码。

Animal animal = new Dog("旺财",3);  //父类引用,引用了子类对象

 你看到的这个过程就是向上转型。

 向上转型的优点:让代码实现更简单灵活。
 向上转型的缺陷:不能调用到子类特有的方法。

向下转型 

将一个对象进行向上转型之后当成父类对象使用,在无法调用子类特有的方法,此时:将父类引用在还原为子类对象即可。

语法格式:

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。

多态 

多态的概念 

 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。

  • 多态是方法或对象具有多种形态,是面向对象的第三大特征
  • 多态前提是两个对象(类)存在继承关系,多态是建立在封装和继承基础之上的

总的来说:同一件事情,发生在不同对象身上,就会产生不同结果。

 多态的应用

说明:如果我们想画一些图形出来,有花,圆形,三角形。

class Shape{public void draw(){System.out.println("画图形");}
}
class Rect extends Shape{@Overridepublic void draw() {System.out.println("♦");}
}
class Cycle extends Shape{@Overridepublic void draw() {System.out.println("⚪");}
}
class Flower extends Shape{@Overridepublic void draw() {System.out.println("❀");}
}
public class Test {public static void main(String[] args) {Shape[]shapes = {new Rect(),new Cycle(),new Flower()};for(Shape shape : shapes){shape.draw();}}
}

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

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

相关文章

Day30力扣打卡

打卡记录 最长回文子序列(区间DP) 链接 class Solution:def longestPalindromeSubseq(self, s: str) -> int:n len(s)f [[0] * n for _ in range(n)]max lambda x, y: x if x > y else yfor i in range(n - 1, -1, -1):f[i][i] 1for j in ra…

Zookeeper概述

ZooKeeper概述 1 分布式应用程序2 分布式应用程序的特点3 Apache ZooKeeper简介4 ZooKeeper客户端 - 服务器架构5 ZooKeeper 分层命名空间6 Zookeeper 工作流7 ZooKeeper 选举机制7.1 ZooKeeper选举概述7.1.1 两种情况分析 7.2 选举实现细节 8 FastLeaderElection:选…

数字媒体技术基础之:常见图片文件格式

在数字图像处理和图形设计领域,了解不同的图片文件格式及其特点是至关重要的。每种格式都有其独特的用途和优势。以下介绍一些最常见的图片文件格式。 JPEG Joint Photographic Experts Group 扩展名:.jpg 或 .jpeg 特点: 1、有损压缩&#x…

二十、泛型(7)

本章概要 动态类型安全泛型异常混型 C 中的混型与接口混合使用装饰器模式与动态代理混合 动态类型安全 因为可以向 Java 5 之前的代码传递泛型集合,所以旧式代码仍旧有可能会破坏你的集合。Java 5 的 java.util.Collections 中有一组便利工具,可以解…

【多样注释】刚入职就崩溃!这段神秘注释让人无法忍受

最近写码写的头晕脑涨,同事听完后给我发来几张神图,我看完当场笑尿🤣,分享一下,权当博君一笑了。 代码注释图案传送门 1、看到了这个注释,心凉了一半 2、阅读源码的人,心里一定的崩溃的 3、这…

pycharm/vscode 配置black和isort

Pycharm blackd Pycharm中有插件可以实现后台服务运行black:BlackConnect 安装 配置 Pycharm isort pycharm中,isort没有插件,暂使用外部工具实现,外部工具也可添加快捷键实现快捷对文件、文件夹进行format import&#xff1…

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地

11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…

uniapp运行到安卓模拟器一直在“同步手机端程序文件完成“界面解决办法

如果你是用的模拟器是android studio创建的模拟器,那么你需要新创建一个android11 x86架构的模拟器: 创建完成后,启动模拟器: 然后在hbuilder中重新运行到这个模拟器就可以了: 运行结果: 如果你是用安…

【ccf-csp题解】第11次csp认证-第三题-Json查询超详细讲解

此题思路来源于acwing ccfcsp认证辅导课 题目描述 思路分析 此题的难点在于对输入的内容进行解析,题目中说除了保证字符串内容不会有空格存在之外,其它的任意地方都可能出现空格,甚至在某些地方还会出现空行,这样的话&#xff0…

python数据处理作业4:使用numpy数组对象,随机创建4*4的矩阵,并提取其对角元素

每日小语 真理诚然是一个崇高的字眼,然而更是一桩崇高的业绩。如果人的心灵与情感依然健康,则其心潮必将为之激荡不已。——黑格尔 难点:如何创建?取对角元素的函数是什么? gpt代码学习 import numpy as np# 随机创…

arm2 day6

串口实现单个字符的收发 main.c uart4.c uart4.h

一文图解爬虫姊妹篇(spider)

—引导语 爬虫,没有一个时代比当前更重视它。一个好的爬虫似乎可以洞穿整个互联网,“来装满自己的胃”。 接上一篇:一文图解爬虫(spider) 博主已初步对爬虫的“五脏六腑”进行了解剖。虽然俗称“爬虫”,但窃…