什么是多态。

简介: 什么是多态。

什么是多态

三:总结

引言

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


一:什么是多态。

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判断,让我们的代码更加容易维护(通过添加子类对象的方式)。让我们写出的程序更加符合设计原则。


目录
相关文章
|
6月前
|
编译器 C语言 C++
49 C++ - 多态
49 C++ - 多态
22 0
|
8天前
深入理解多态
深入理解多态
11 0
|
8天前
|
存储 编译器 C++
c++多态
c++多态
13 0
|
10月前
多态你真的了解吗?
多态你真的了解吗?
46 0
|
10月前
什么是多态?
什么是多态?
41 0
|
7月前
|
存储 设计模式 编译器
多态【C++】
多态【C++】
51 0
|
8月前
|
Java
多态理解
多态理解
22 0
|
11月前
|
C++

热门文章

最新文章