背景
我们学习总是欺骗自己,写了笔记就以为自己会了,都是假学习。所以再次学习一下多态,并且落实在代码上。
概念
多态指为不同数据类型的实体提供统一的接口。 同一操作作用于不同的对象,可以有不同的解释产生不同的执行结果。
那这两句话怎么解释呢?
第一句:同一操作作用于不同的对象。
解释:接口是oper,不同数据类型的实体是OperationAdd、OperationSub、OperationMul、OperationDiv
第二句:同一操作作用于不同的对象,可以有不同的解释产生不同的执行结果。
同一操作是都调用了CreateOpertion()方法,不同对象是传给CreateOpertion是加法对象 和减法对象,不同的执行结果,第二张图中Getresult()返回的值不一样。
面向对象中的多态
在面向对象编程中,多态是一种重要的概念,它允许不同类型的对象对同一消息做出不同的响应。多态性能够提高代码的灵活性和可扩展性,使得程序更易于维护和扩展。本文将介绍多态的概念,并提供一些代码示例来说明。
1. 多态的概念
多态是指同一个方法调用可以根据对象的不同类型而具有不同的行为。在多态中,父类的引用变量可以引用子类的对象,通过父类引用调用的方法会根据实际对象的类型来执行相应的实现。
多态具有以下特点:
- 对象的多态性是在运行时确定的,而不是在编译时确定的。
- 多态性只适用于方法,而不适用于属性。
2. 多态的实现
要实现多态,需要满足以下条件:
- 存在继承或实现关系。
- 存在父类或接口类型的引用变量。
- 子类或实现类重写了父类或接口中的方法。
以下是一个简化的代码示例:
// 父类
class Animal {
public void makeSound() {
System.out.println("Animal makes sound");
}
}
// 子类
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat meows");
}
}
// 子类
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks");
}
}
// 测试类
public class PolymorphismExample {
public static void main(String[] args) {
Animal animal1 = new Cat();
Animal animal2 = new Dog();
animal1.makeSound(); // 输出 "Cat meows"
animal2.makeSound(); // 输出 "Dog barks"
}
}
在上述示例中,Animal
是父类,Cat
和 Dog
是子类。通过父类引用变量 animal1
和 animal2
,我们可以分别创建 Cat
和 Dog
对象,并调用它们的 makeSound()
方法。由于方法被重写,所以根据对象的实际类型,方法会有不同的行为。
3. 多态的优势
多态性在面向对象编程中有以下优势:
- 灵活性:通过多态,可以在运行时决定具体使用哪个子类的实现,从而提供更大的灵活性和可扩展性。
- 代码复用:通过使用父类引用变量,可以在不修改现有代码的情况下添加新的子类实现。
- 可替换性:由于多态性,可以将子类对象替换成父类对象,从而使得代码更通用和可维护。
4. 多态的应用
多态性在实际编程中有广泛的应用,例如:
- 在面向对象设计中,利用多态可以实现开闭原则,即可以在不修改现有代码的情况下扩展系统的功能。
- 在框架和接口设计中,多态性使得代码更具通用性和可扩展性,能够适应不同的需求和场景。
- 在面向对象的设计模式中,多态性是许多模式的基础,如策略模式、工厂模式等。
通过充分理解和应用多态性,可以提高代码的可维护性和可扩展性,同时使得程序更加灵活和易于理解。在实际开发中,需要根据具体需求和场景来灵活运用多态的特性。