首页 > 编程语言 >Java - 面向对象 - 多态

Java - 面向对象 - 多态

时间:2023-02-10 20:33:05浏览次数:50  
标签:Java 子类 转型 多态 面向对象 重载 父类 重写

多态

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

对面向对象来说,多态分为编译时多态运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

多态:父类的引用 指向 子类的实例,接口的引用 指向 实现类的实例

Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。

  • = 继承:在多态中必须存在有继承关系的子类和父类。
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

多态一般分为两种:重写式多态和重载式多态。

  • 重载式多态,也叫编译时多态。也就是说这种多态再编译时已经确定好了。重载大家都知道,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数最后得到不同的结果。

    但是这里是有歧义的,有的人觉得不应该把重载也算作多态。因为很多人对多态的理解是:程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,这种情况叫做多态。 这个定义中描述的就是我们的第二种多态—重写式多态。并且,重载式多态并不是面向对象编程特有的,而多态却是面向对象三大特性之一(如果我说的不对,记得告诉我。。)。

    我觉得大家也没有必要在定义上去深究这些,我的理解是:同一个行为具有多个不同表现形式或形态的能力就是多态,所以我认为重载也是一种多态,如果你不同意这种观点,我也接受。

  • 重写式多态,也叫运行时多态。这种多态通过动态绑定(dynamic binding)技术来实现,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,只有程序运行起来,你才知道调用的是哪个子类的方法。 这种多态通过函数的重写以及向上转型来实现,我们上面代码中的例子就是一个完整的重写式多态。我们接下来讲的所有多态都是重写式多态,因为它才是面向对象编程中真正的多态。

  • 向上转型

    子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口

    向上转型的好处

    • 减少重复代码,使代码变得简洁。
    • 提高系统扩展性。

    向下转型

    与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)

    向下转型注意事项

    • 向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)
    • 向下转型只能转型为本类对象(猫是不能变成狗的)。

标签:Java,子类,转型,多态,面向对象,重载,父类,重写
From: https://www.cnblogs.com/amor2818/p/17110219.html

相关文章

  • Java基础知识(关系运算符/比较运算符、逻辑运算符)
    一:关系运算符符号说明==a==b,判断a和b的值是否相等,成立为true,不成立为false。!=a!=b,判断a和b的值是否相等,成立为true,不成立为false。>a>b,判断a是否大于b,成立为true,不成立f......
  • 学习打卡01- java入门
    1,基础知识点:java的三个版本javaSE(java基础版),javaEE(java企业版),javaME(小型嵌入式开发)LTS(Longterm<时期>support<支持>)长期支持版公司长期维护包括5.......
  • JavaScript迭代器与生成器
    JavaScript的迭代器与生成器前沿:可迭代对象及其相关的迭代器是是ES6的一个特性。数组是可迭代的,字符串、set对象和map对象也是。这意味着这些数据结构的内容可以通过......
  • 浏览器中的JavaScript(3)
    3.操作CSS摘要:我们已经知道了JavaScript可以控制HTML文档的逻辑结构和内容。通过对CSS编程,Javascript也可以控制文档的外观和布局。接下来讲解几种JavaScript可以用来操作......
  • java防止频繁请求、重复提交(防抖动)
    在客户端网络慢或者服务器响应慢时,用户有时是会频繁刷新页面或重复提交表单的,这样是会给服务器造成不小的负担的,同时在添加数据时有可能造成不必要的麻烦。自定义注解/......
  • Java基础知识(自增自减运算符、赋值运算符)
    一:自增自减运算符1.基本用法作用符号说明加++变量的值加1减--变量的值减1注意:++和--既可以放在变量的前边,也可以放在变量的后边。1.单独使用:++和--无论是放在变量的前边还是......
  • java 接口返回空指针问题排查
    java接口返回空指针问题排查问题现象现象:业务流程都能通,数据也正常,就是接口返回【空指针异常】排查:postman接口调用测试,返回200PHP项目中调用接口,返回400空指针异常......
  • Java 判断Ip的正则表达
    IPv4校验publicstaticbooleanisboolIp(StringipAddress){Stringip="([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|2......
  • 多态
    多态多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各......
  • java -jar 启动依赖包分离的jar包,jasypt 加密报错 Factory 找不到
    1、windows下使用使用分离方式打包,使用java-jar方式启动jar包报错提示Factory相关报错2、将jre/lib/ext下面的sunjce_provider.jar拷贝到分离出来的jar包目录中再......