コードがコンパイルされていませんに従い、Line 1
インタフェースと共変戻り値の型
今戻り値の型で、次のエラーを与えているがB.m1()
interface A {
Object m1();
}
interface B {
String m1();
}
abstract class C implements A,B {
@Override
public Object m1() //Line 1
{
return new Object();
}
}
class D extends C {
@Override
public String m1() {
return "";
}
}
、私のクエリと互換性がありませんObject
とString
はcovariant
、class C
は抽象クラスです。A
とB
の両方を実装していますが、なぜこのコンパイルエラーがあるのですか?インタフェースメソッド。
あなたがリターンとして、ボイドを置けば、それは –
罰金に動作します入力することのようなものは何もありません、答えを見つけると私の疑問をクリアしようとしないの問題ください.. :) –
'C'は動作しません。 'C'が' B'ならば、 'm1'から' String'を返すことを期待しています。だから、 'B'は' A'のように動作しますが、**はそうではありません。だから 'C'は動かない。 [Liskov](https://en.wikipedia.org/wiki/Liskov_substitution_principle)を参照してください。 –