当前位置: 首页 > news >正文

学【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.lryc.cn/news/230432.html

相关文章:

  • 【汇编】内存的读写与地址空间、寄存器及数据存储
  • DSP生成hex方法
  • GZ038 物联网应用开发赛题第7套
  • ELK之Logstash解析时间相差8h的问题
  • uniapp+vite+vue3开发跨平台app,运行到安卓模拟器调试方法
  • Ubuntu诞生已经19年了
  • 跟着基金买,别墅靠大海?买基金重仓股票,会破产吗?| 附最新选股结果
  • 【教3妹学编辑-mysql】mybatis查询条件遇到的坑及解决方案
  • 032-从零搭建微服务-定时服务(一)
  • 精通Nginx(11)-缓存
  • 用excel计算矩阵的乘积
  • 【微软技术栈】C#.NET 中使用依赖注入
  • 开启学历新征程,电大搜题助您轻松获取知识
  • Redis 安装
  • Windows GitBash解决Github添加密钥时提示Key is already in use的问题
  • 第1关:简单查询
  • Android设计模式--Builder建造者模式
  • css实现鼠标悬停时元素的显示与隐藏
  • 天气越来越寒冷,一定要注意保暖
  • 03 # 类型基础:动态类型与静态类型
  • Python编程——模块、包和__init__.py
  • 220kV110kV10kV变电站初步设计
  • Git企业开发级讲解(一)
  • 【微信支付通知】对resource解密 AEAD_AES_256_GCM算法工具类
  • JVM虚拟机:垃圾回收之三色标记
  • 唯坚持而已
  • 【大语言模型】Docker部署清华大学ChatGLM3教程
  • 详解 KEIL C51 软件的使用·设置工程·编绎与连接程序
  • 小程序实现语音识别功能
  • 判断两层对象中是否有空的value值