考虑以下代码:
class NumberWrapper {
boolean negative;
void setNegativeTrue(boolean isNegative) {
negative = isNegative;
}
void negateNumber(int x) {
if (negative) {
x = x * -1;
} else {
x = Math.abs(x);
}
return x;
}
}
在这样的代码中,如何使用多态?
答案 0 :(得分:3)
您可以替换boolean
参数,该参数会产生两个不同的代码路径和两个不同的类,每个类实现一个路径。
abstract class Foo {
abstract void calculate(int x);
}
class NormalFoo extends Foo {
void calculate(int x) {
x = Math.abs(x);
return x;
}
}
class NegativeFoo extends Foo {
void calculate(int x) {
x = x * -1;
return x;
}
}
而不是setNegativeTrue
,您可以创建其中一个类,从而用多态性替换条件
答案 1 :(得分:2)
public enum UnaryOperator {
NEGATE {
@Override
public int apply(int x) {
return -x;
}
},
ABS {
@Override
public int apply(int x) {
return Math.abs(x);
}
}
public abstract int apply(int x);
}
class Foo {
private UnaryOperator operator = UnaryOperator.ABS;
void setUnaryOperator(UnaryOperator operator) {
this.operator = operator;
}
void calculate(int x) {
return operator.apply();
}
}