面试题答案
一键面试Java多态概念
多态是Java面向对象编程的重要特性之一,它允许通过一个父类类型的变量引用不同子类类型的对象,并根据实际引用对象的类型来决定调用哪个子类的方法。具体表现为:
- 方法重载(Overloading):在同一个类中,多个方法可以有相同的方法名,但参数列表不同(参数个数、类型或顺序不同)。这是编译时多态,在编译阶段就确定调用哪个方法。
- 方法重写(Overriding):子类继承父类后,可以重新实现父类中定义的方法。当通过父类引用调用该方法时,实际执行的是子类重写后的方法,这是运行时多态,在运行阶段才确定调用哪个方法。
策略模式中Java多态的体现与应用
策略模式定义了一系列算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。在策略模式中,Java多态主要通过方法重写来体现。
以下是一个简单的策略模式示例代码:
- 定义策略接口:
// 定义一个计算策略接口
interface CalculationStrategy {
int calculate(int num1, int num2);
}
- 实现具体策略类:
// 加法策略类
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;
}
}
- 定义环境类:
// 环境类,持有一个策略接口的引用
class Context {
private CalculationStrategy strategy;
public Context(CalculationStrategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return strategy.calculate(num1, num2);
}
}
- 使用策略模式:
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
是策略接口,AdditionStrategy
和SubtractionStrategy
是具体的策略实现类,它们重写了calculate
方法。Context
类持有CalculationStrategy
接口的引用,通过构造函数注入具体的策略对象。在main
方法中,通过创建不同策略的Context
对象,体现了多态性,根据实际传入的策略对象不同,调用不同的calculate
方法实现不同的计算逻辑。