Java多态的理解,真实开发详解,带编程,通俗白话文,简单易懂

本文以生动的故事解释了面向对象编程中的多态概念,通过张三、李四和他们父亲的类比,展示了继承与方法重写如何实现多态。在代码示例中,详细阐述了如何通过父类引用调用子类方法,从而实现多态的效果。文章强调了理解多态的重要性,并鼓励读者多实践以加深理解。
摘要由CSDN通过智能技术生成

如果敌人可以让你生气,那么就代表你还没有胜他的把握

首先我想吐一下槽,我想了解一下多态,网上的相关技术文档,花里胡哨的,简单的,打着解答的旗号骗鬼子的

我看完这些文章我无语了,这…,我既然来查这个东西,就代表我不太懂,结果就这,一顿花里胡哨的操作看的我头皮发麻,好不容易有些头绪的我,被这些玩意冲的一干二净;我现在口中积攒了几十年的脏话,我恨不得全部吐他们脸上!!

在这里插入图片描述

算了,这毕竟是一篇技术文档,多态作为面向对象的特征之一,对于新手小白来说,这玩意理解起来就像鸡蛋明明是圆的,他非要让我们抽象的理解为方的,不仅如此,他的功能从之前的孵化小鸡直接变成了一直鸡,简直抽象的不得了,面对抽象,我们就要用抽象去理解

在这里插入图片描述

那到底什么是多态呢?

首先看这篇文章,必须对重写、继承有一定的基础,要不然肯定看不懂,你们可以看看我之前写的,也可以去看看别人的
注意,这篇文章只是为了帮助人了解什么是多态,以及多态的作用,至于想用多态干其他东西的,直接关电脑

多态就是指同一种事物,有多种形态

我们就拿法外狂徒张三来讲,张三很有钱,因为啥有钱呢?因为张三的爸爸有钱,张三继承了他爸爸的财产;
但是张三还有一个亲生兄弟叫李四,李四同样也继承了他爸的财产,OK,现在我们需要记好以下:
张三有一辆自行车
李四有一辆电瓶车
那张三李四的爸爸呢,有一辆三轮车;

那我们抽象的理解一下,假如你想要找这一家人借一辆车去玩,那借什么车呢?你也不知道,但是你需要去看一下啊,看骑哪个车帅,你骑哪个;

但是我们找车,一个一个人的找车,太麻烦了,我们直接去找张三的爸爸,因为张三和李四的车都是从他那里继承的,他肯定知道什么车帅;

如果我们只找张三,首先我们要在测试类中new一个张三的对象,然后告诉张三把你的车调给我,然后张三就调给你了,突然你又觉得李四的车比较帅,你又得去找李四,new一个李四,李四给你调;

但是你直接找张三的父亲,张三的父亲,什么车都可以调

在这里插入图片描述

以上的所有信息都只是为了让你们抽象的理解,不作为教学参考,你们阅读完刚刚那个童话故事,我们现在上代码,我会选择最简单的代码,给你们讲解多态,不整那些花里胡哨的

创建以下四个类:
父类,张三类,李四类,测试类

//父类
public class Fu {
}
//张三类
public class ZS {
}
//李四类
public class LS {
}
//测试类
public class Test {
}

首先让张三和李四继承父类

//李四类
public class LS extends Fu{
}

//张三类
public class ZS  extends Fu{
}

然后我们刚刚说了,张三的爸爸为什么可以调用张三和李四的车,因为他是张三老子,
那此时我们的子类以及继承了父类,是不是父类以及可以调用子类了?这里我们需要使用方法的重写,首先我们在父类写入三轮车的方法

//父类
public class Fu {
    public void che(){
        System.out.println("父类的三轮车");
    }
}

然后我们在子类中重写父类中的che方法(方法名和参数必须一模一样)

//李四类
//李四类
public class LS extends Fu{
    @Override
    public void che() {
        System.out.println("李四的电动车");
    }
}
//张三类
public class ZS  extends Fu{
    @Override
    public void che() {
        System.out.println("张三的自行车");
    }
}

现在我们父类和张三、李四各有一个方法,这个方法是重写父类的,这个也是我们多态实现的重要桥梁

那我们之前想获得张三的的方法,还怎么获得?
在这里插入图片描述肯定是这样,那我们像调用李四的呢?
在这里插入图片描述以上就是用创建对象来调用的,

那么如何通过父类来调用呢?
写一个add的静态方法,我们需要对张三和李四进行调用,该怎么调用?
在这里插入图片描述此时,我们把ZS的对象传入进去,发现根本传入不了,运行不出效果
那时因为第一,我们是想通过父类调取子类,还有就是,张三这个对象并没有赋值到我们的静态方法内
所以:

写一个add的静态方法,方法内有一个参数,Fu代表的是指编译时,是在父类运行的,fu这个就是普通的变量,用来接收子类对象的;
在这里插入图片描述随后我们把张三或李四的对象传到静态方法的fu内
在这里插入图片描述

在静态方法内,由于我们的fu已经获得了李四的对象,我们直接调用方法就可以了
在这里插入图片描述在这里插入图片描述
我们想调用张三的,我们就直接改add方法传入的对象就可以了
在这里插入图片描述在这里插入图片描述

虽然效果达到了,但是我们要写的严谨点,把new的张三李四对象前面的编译区设置成父类,就可以了
在这里插入图片描述
那这时我们就可以知道,是由父类调用的子类属性,就这Fu ls = new LS();一段代码,我们就可理解成多态

我们通过父类的一种方法
在这里插入图片描述
通过重写,完成了一种方法可以有多种形态,这种形式,就称作多态,万变不离其宗,多看多写多练,方可成神;
在这里插入图片描述
最后的最后,来一张心灵净化图,缓解神经疲劳
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DNCS高级工程师

你的创作是我打赏的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值