MST
星途 面试题库

面试题:Java中多态在策略模式里是如何体现的

请简要阐述Java多态概念,并说明在策略模式中,Java多态是怎样体现和应用的,可结合简单代码示例说明。
31.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Java多态概念

多态是Java面向对象编程的重要特性之一,它允许通过一个父类类型的变量引用不同子类类型的对象,并根据实际引用对象的类型来决定调用哪个子类的方法。具体表现为:

  1. 方法重载(Overloading):在同一个类中,多个方法可以有相同的方法名,但参数列表不同(参数个数、类型或顺序不同)。这是编译时多态,在编译阶段就确定调用哪个方法。
  2. 方法重写(Overriding):子类继承父类后,可以重新实现父类中定义的方法。当通过父类引用调用该方法时,实际执行的是子类重写后的方法,这是运行时多态,在运行阶段才确定调用哪个方法。

策略模式中Java多态的体现与应用

策略模式定义了一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。在策略模式中,Java多态主要通过方法重写来体现。

以下是一个简单的策略模式示例代码:

  1. 定义策略接口
// 定义一个计算策略接口
interface CalculationStrategy {
    int calculate(int num1, int num2);
}
  1. 实现具体策略类
// 加法策略类
class AdditionStrategy implements CalculationStrategy {
    @Override
    public int calculate(int num1, int num2) {
        return num1 + num2;
    }
}

// 减法策略类
class SubtractionStrategy implements CalculationStrategy {
    @Override
    public int calculate(int num1, int num2) {
        return num1 - num2;
    }
}
  1. 定义环境类
// 环境类,持有一个策略接口的引用
class Context {
    private CalculationStrategy strategy;

    public Context(CalculationStrategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.calculate(num1, num2);
    }
}
  1. 使用策略模式
public class StrategyPatternDemo {
    public static void main(String[] args) {
        // 使用加法策略
        Context additionContext = new Context(new AdditionStrategy());
        int additionResult = additionContext.executeStrategy(5, 3);
        System.out.println("加法结果: " + additionResult);

        // 使用减法策略
        Context subtractionContext = new Context(new SubtractionStrategy());
        int subtractionResult = subtractionContext.executeStrategy(5, 3);
        System.out.println("减法结果: " + subtractionResult);
    }
}

在上述代码中,CalculationStrategy是策略接口,AdditionStrategySubtractionStrategy是具体的策略实现类,它们重写了calculate方法。Context类持有CalculationStrategy接口的引用,通过构造函数注入具体的策略对象。在main方法中,通过创建不同策略的Context对象,体现了多态性,根据实际传入的策略对象不同,调用不同的calculate方法实现不同的计算逻辑。