1

質問があります。Java には、Employee を拡張してインターフェース IFresher を実装するクラス Fresher があります。以下のコードを参照してください。

public interface IFresher {
        // Some other stuff
    public void takeCall();
}



public class Employee extends Human {
        // Some other stuff
    public abstract void takeCall()
       {
          // Some basic implementation
       }

}

class  Fresher extends Employee implements IFresher
{
        @Override
    public void takeCall() {

    }
}

質問: どちらの takeCall() メソッドが Fresher サブクラスに実装されますか? それはインターフェースからですか、それともスーパー クラスからですか? スーパー クラスとインターフェースの間に競合がある場合、階層の順序はどうなりますか?

4

2 に答える 2

2

この場合、競合は発生しません。インターフェイスには実装が含まれていないため、継承元の (スーパークラス) 実装は 1 つしかありません。

Fresher は Employee から実装を継承します (この場合は takeCall メソッドをオーバーライドします)。ただし、正しい署名を持つ関数があるため、IFresher も正常に実装されます。

(余談ですが、これが Java で複数の実装の継承が許可されていない主な理由です。すべてがどのように機能するかを定義するのは非常に困難です)

于 2012-08-03T02:30:05.167 に答える
0

あなたの場合、特に明示的にオーバーライドしているため、 Fresher が優先されます。

インターフェイスは関数シグネチャのコントラクトのみを提供し、機能を提供しないため、考慮されません。

于 2012-08-03T02:29:34.460 に答える