什么是多态
引言
我们总提到面向对象的三大特征、封装,继承,多态。可是你真的知道究竟什么是多态吗?多态有什么作用你真的清楚吗?今天就让我们结合例子好好聊聊,到底是什么多态。
一:什么是多态。
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判断,让我们的代码更加容易维护(通过添加子类对象的方式)。让我们写出的程序更加符合设计原则。