什么是多态。

引言

我们总提到面向对象的三大特征、封装,继承,多态。可是你真的知道究竟什么是多态吗?多态有什么作用你真的清楚吗?今天就让我们结合例子好好聊聊,到底是什么多态。

一:什么是多态。

  1. 什么是继承?
    聊多态就必须聊继承,我们先聊聊什么是继承呢?
    继承指的是一个类可以从另一个类中继承属性和方法。继承是实现多态的一种方式,因为它允许不同的类共享相同的属性和方法。
  2. 什么是多态?
    多态则指的是一个对象可以表现出多种形态。具体来说,在继承中,一个子类可以重写父类的方法,从而使得同样的方法名可以根据对象的类型具有不同的行为,这就是多态的体现。
  3. 多态是建立在继承的基础上的,可以说没有继承就没有多态
    没有继承就没有多态。如果没有继承,就无法重写父类的方法,也就无法实现同样的方法名具有不同的行为的特性,也就不可能有多态的表现。
    多态指的就是。首先子类继承父类的方法、然后子类重写父类的方法、最后使用的时候,用父类的对象指向子类的引用,同样的一个父类对象会出现多种状态。

这样说可能有些枯燥,让我们结合代码来看一看吧~

二:解释多态的例子。

下面我将给出一个动物的例子,用来带着大家理解什么是多态。

2.1 类图

先宏观,在微观,利于我们进行思考,先给出类图,让大家在宏观上,查看我们的类以及它们之间的对应关系。
在这里插入图片描述

2.2 父类 Animal

class Animal {
  public void makeSound() {
    System.out.println("动物发出声音");
  }
}

父类提供了一个发出声音的方法,所有继承此类的类,都能发出声音

2.3 子类 Dog与子类Cat

class Dog extends Animal {
  @Override
  public void makeSound() {
    System.out.println("狗在叫");
  }
}
// 子类 Cat
class Cat extends Animal {
  @Override
  public void makeSound() {
    System.out.println("猫在喵喵叫");
  }
}

连个子类分别继承了父类,并进行了重写

2.4测试类

public class Test {
  public static void main(String[] args) {
	Animal myAnimal = new Animal (); 
    //父类引用指向子类Dog对象
    Animal myDogAnimal = new Dog(); 
     //父类引用指向子类Cat对象
    Animal myCatAnimal = new Cat();   

    myAnimal .makeSound(); // 调用 Animal  类的方法
    myDogAnimal .makeSound();    // 调用 Dog 类的方法
    myCatAnimal .makeSound();    // 调用 Cat 类的方法
  }
}

2.5 执行结果

动物发出声音
狗在叫
猫在喵喵叫

在测试类的main函数中,我们分别声明了三个 同为 Animal 类型的对象,同样的调用的他们的 makeSound方法。但是却出现了三种不同的结果。
在调用 myDogAnimal .makeSound()和myCatAnimal .makeSound();的时候,实际上会调用 Dog 类的 makeSound() 方法和Cat 类的 makeSound() 方法,而不是 Animal 类的方法。
这就是多态的体现,即同一个方法调用会根据对象的不同而表现出不同的行为。

三:总结

  1. 父类的引用变量可以指向其子类的对象,而在运行时根据对象的实际类型来确定调用哪个方法。这意味着,同一个方法可以在不同的对象上产生不同的行为,从而实现了多态。多态可以提高代码的可维护性和扩展性,使代码更加灵活和可重用。
  2. 通过这种方式,可以减少很多的if判断,让我们的代码更加容易维护(通过添加子类对象的方式)。让我们写出的程序更加符合设计原则。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郝老三

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值