12 Java面向对象之多态

news/2024/7/7 21:45:19
JavaSE 基础之十二

12 Java面向对象之多态

① 多态的概念及分类

  1. 多态的概念:对象的多种表现形式和能力
  2. 多态的分类
      1. 静态多态:在编译期间,程序就能决定调用哪个方法。方法的重载就表现出了静态多态。
      2. 动态多态:在程序运行期间,才能决定调用对象的哪个方法。在继承中,父类对象引用指向子类对象。
  3. 动态多态的特点
    1. 父类对象可以将引用指向子类对象,也可以指向本类对象。
    2. 多态其实指方法的多态:创建本类对象调用就是本类的方法。创建子类对象调用就是子类的方法。
    3. 如果子类没有重写父类的方法,默认就调用子类继承的方法(父类的方法)。
    4. 只能父类对象引用指向子类对象,不能反过来子类引用指向父类。
  4. 动态多态存在的条件
    1. 要有继承(两个类之间存在继承关系,子类要继承父类)。
    2. 要有重写(子类继承父类,子类一定要重写父类的方法)。
    3. 父类引用指向子类对象。
  5. 静态多态与动态多态的区别
    1. 相同:都是方法的多态,在代码执行过程中调用不同方法达到不同的效果。
    2. 不同:
      1. 静态多态重载来实现的,动态多态是用重写来实现的。
      2. 静态多态一个类的多个方法,相同行为的不同表现形式。
      3. 动态多态在运行的时候再决定执行的是某个子类里边的方法,将多态的方法分配到每个子类里边。

② 动态多态的应用

  1. 动态绑定机制
      在面向对象程序开发中,将一个方法调用与该方法所在的类关联起来,称为“绑定”。
      所谓的动态绑定,是指在运行时根据具体对象的类型进行绑定。
      当父类引用指向子类对象的时候,如果调用被子类重写的方法,那么表现得不是父类中的效果而是子类重写后的效果。
  2. 多态参数
      多态参数:就是当方法的某个形式参数是一个引用的时候,与该引用兼容的任何对象都可以传递给方法,从而允许方法接收不同数据类型的形式参数。
      例如:equals()方法
      如果方法中调用该对象的一个被重写的方法,那么不同类型的子类对象会表现出不同的体现。
  3. 异构集合
      创建一个不是同一类型但是有共同父类的数据集合。不同对象的集合称为异构集合。

③ instanceOf

  1. Java的多态性导致引用变量类型和实际引用的对象可以不一致。为了更准确区分出引用的是什么类型的对象,Java引入了instanceof运算符。
  2. 但是在Java中不推荐使用,推荐使用重载的方式。
  3. 只能用于对象。

④ 对象的转型

  1. 自动转型
      通过父类引用指向子类对象,其实子类自动转换成了父类的数据类型,在继承中子类重写了父类的方法,提供的方法比父类更加强大。
      向上转型存在一定的缺陷,将子类转换为父类对象,调用的时候只能调用父类的属性和行为,子类自己扩展的属性和行为无法使用。
  2. 强制转型 
      向下转型的好处:可以调用子类继承的属性和方法,还可以调用扩展的内容。

转载于:https://www.cnblogs.com/Gavin520/p/10554481.html


http://lihuaxi.xjx100.cn/news/244317.html

相关文章

蓝懿教育九月二十七日记录

将VIew移动做成动画效果 这种动画效果没有中间的位移可以添加动画的View属性center,frame,alpha,transform , backgroundColor//继续做消失的动画[UIView animateWithDuration:1 animations:^{iv.alpha 0;} completion:^(BOOL finished) …

array_multisort

function sorting_by_sale($arrUsers, $direction"desc"){if(empty($arrUsers)){return $arrUsers;}$direArr array("desc">SORT_DESC, asc>"SORT_ASC");$sort array( direction > $direArr[$direction], //排序顺序标志 SORT_DESC …

IDEA添加maven并添加阿里镜像

1.打开IDEA&#xff0c;file->settings 然后设置maven的jdk&#xff0c;不然使用默认的可能会导致有些jar下载有问题 这里选择的是1.8,因为我安装的是jdk1.8环境 在maven的conf下的settings.xml添加如下代码&#xff1a; <mirror> <id>alimaven</id&…

05-04-查看补丁更新报告

《系统工程师实战培训》 -05-部署补丁管理服务器 -04-查看补丁更新报告 作者&#xff1a;学 无 止 境QQ交流群&#xff1a;454544014///安装报表工具&#xff08;在100-Admin01上面安装如下工具&#xff0c;方便查看WSUS更新补丁报告!&#xff09;Microsoft System CLR Types f…

linux sar 命令详解

sar&#xff08;System Activity Reporter系统活动情况报告&#xff09;是目前 Linux 上最为全面的系统性能分析工具之一&#xff0c;可以从多方面对系统的活动进行报告&#xff0c;包括&#xff1a;文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程…

微信小程序-锚点定位+内容滑动控制导航选中

之前两篇文章分别介绍了锚点定位和滑动内容影响导航选中&#xff0c;这里我们就结合起来&#xff0c;实现这两个功能&#xff01; 思路不再多说&#xff0c;直接上干货&#xff01; WXML <view class"navigateBox"><view class"title"><ima…

页面与ViewModel(上)

在UWP淘宝与旺信中&#xff0c;笔者主要负责页面与控件的制作&#xff0c;这些工作看似简单&#xff0c;但要想做的全面细致仍然需要深入的思考。本文想分享一些在UWP旺信的制作过程中&#xff0c;笔者在UI页面与控件制作上体会到的一些心得。可能笔者的有些方法并不见得高明&a…

IDEA2020如何设置全局maven路径

个人免费资源分享网站&#xff1a;http://xiaocaoshare.com/ File —> New Prijects Settings —> Setting for New Projects…