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

JAVA多态(超详细讲解)

目录

多态的基本介绍:

实现多态的条件:

1.继承:必须要有子类继承父类的继承关系。

2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。

3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。


JAVA面向对象编程有三大特性:封装、继承、多态。

在我们学习了继承后,我们将继续学习多态。

多态的基本介绍:

这里引用下其他地方的解释。 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

通俗点讲,多态就是不同对象对同一物体或事件发出不同的反应或响应。比如stuendt是一个父类,那么在操场上上体育课的学生和在教室里面的学生就是它的子类。这时上课铃声响了,上体育课的学生去操场,在教室里面上课的学生则是回教室,不同的学生有着不同的反应,这就是多态。

实现多态的条件:

1.继承:必须要有子类继承父类的继承关系。

2.重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。

3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

什么叫做向上转型

A b = new A();这行代码大家因该都很清楚,我们实例化了一个A的对象。但是当我们这样来定义的时候呢?

例如: A b =new a(); (a是A的子类)

这里我们定义了一个A类型的b,但是它是由a来对象实例。

那么向上转型的作用是什么呢?

在上面我们说了子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。向上转型后,子类单独定义的方法会丢失(即子类重载了父类中的方法),而子类中重写了父类的方法,当我们调用他们时,会调用重写的方法。理解起来麻烦的话,直接来看代码吧。

class win{String name;win(){name="win";}win(String name){this.name=name;}public void tostring() {System.out.println(  "this is win" );Tostring();}public void Tostring() {System.out.println( "This is win" );}public void setName(String name) {this.name=name;}public String getName() {return name;}
}
class win1 extends win{win1(){}win1(String name){this.name=name; }public void tostring(String name) {       //重载System.out.println( "this is win1");Tostring();}public void Tostring() {                 //重写System.out.println( "This is win1");}
}
public class Main{public static void main(String[] args){win a =new win1("win1");a.tostring();}
}

分析:子类win1重载了tostring()方法,重写了Tostring()方法,当我们调用a.tostring()方法时,因为向上转型的原则,先会调用父类中的tostring()方法(子类中的tostring()重载后丢失),在调用子类中的Tostring()方法。

再来看一个代码,我们同时将子类中的两个方法都重载看下

public void tostring(String name) {       //重载System.out.println( "this is win1");Tostring();}public void Tostring(String name) {                 //重载System.out.println( "This is win1");}

可以看到这里我们都调用的是父类中的方法,因为子类中的方法都被重载了。

看到这里,大家应该能理解下面代码的意思了吧

public void tostring() {       //重写System.out.println( "this is win1");Tostring();}public void Tostring(String name) {                 //重载System.out.println( "This is win1");}

public void tostring() {       //重写System.out.println( "this is win1");Tostring();}public void Tostring() {                 //重写System.out.println( "This is win1");}

http://www.xdnf.cn/news/11352.html

相关文章:

  • Activiti 工作流引擎 详解
  • Linux 内核编译 modules ehci-hcd, ohci-hcd, uhci-hcd not found
  • springboot接口文档
  • E - Shooting Game FZU - 2144
  • 【CBAP50技术手册】#34 Process Analysis(流程分析):业务分析师的“优化镜头”
  • inno setup介绍
  • KMP算法精讲
  • 电脑联网跳msftconnecttest(无论是不是校园网)
  • Genymotion中文手册,Genymotion配置
  • 在ubuntu下安装mysql
  • 如何快速绘制一张业务流程图?8张实操案例帮你快速上手!
  • 自动跳转到www.0749.com网页问题
  • Java IDEA JUnit 单元测试
  • XMLHttpRequest的五种状态描述——常见的请求头和相应头都有什么——reflow(回流)repaint(重绘)引起变换的原因
  • 转:LaTeX 换行换页与段落命令与图书模板
  • InstallShield使用完全教程
  • ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了
  • 多个域名可以指向同一个主机ip地址_一文彻底搞懂外贸网站相关的域名设置
  • IMP ORA-20005: object statistics are locked(二)
  • WAP页上传图片
  • 15个Python兼职接单平台!利用业余时间赚钱
  • 捷克论坛新ip_兰峰:提升哈尔滨冰雪文化IP打造能力
  • emule最新服务器地址,emule 国内服务器(最新emule服务器)
  • 提升C# 写入Excel操作的效率方式
  • LoadRunner压力测试方法
  • 高分卫星系列介绍及其传感器参数
  • MySQL基础入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • 操作系统——缓冲区(buffer)与缓存(cache)
  • scrum回顾_敏捷,Scrum框架入门一篇文章就够了
  • mingw64环境搭建