Calculator
インターフェイスは、calculate
抽象メソッドとramdom()
抽象メソッドを持っています。私はスーパーramdom()
とramdom()
を具象クラスCalculatorImpl
で上書きしたいと思います。私の質問は、なぜそれをCalculator.super.ramdom()
のように呼び出さなければならないのですか?なぜsuper.ramdon()
が機能しないのですか?コンクリートクラスの非抽象メソッドを呼び出す
public interface Calculator {
double calculate(int a);
default double ramdom() {
System.out.println("Calculator ramdom");
return Math.random();
}
}
class CalculatorImpl implements Calculator {
@Override
public double calculate(int a) {
// calling super.ramdom() will get [The method ramdom() is undefined for
// the type Object error]
return Calculator.super.ramdom() * a;
}
@Override
public double ramdom() {
System.out.println("CalculatorImpl ramdom");
return 0;
}
}
実際には、 '@ Override'を削除しても何も影響しません。[How to spell random](http://www.spellweb.com/how-do-you-spell/random) – shmosel