8

Java 8 では、デフォルト メソッドの概念が導入されています。デフォルトのメソッドを持つ次のインターフェースを考えてみましょう:

public interface IDefaultMethod {

    public abstract void musImplementThisMethod();
    public default void mayOrMayNotImplementThisMethod() {
        System.out.println(" This method is optional for classes that implement this interface ");
    }

}

そして、このインターフェースを実装するクラス:

    public class DefaultMethodImpl implements IDefaultMethod {

        @Override
        public void musImplementThisMethod() {
                System.out.println("This method must be implementd ");
        }


        @Override
        public void mayOrMayNotImplementThisMethod() {
            // TODO Auto-generated method stub
            IDefaultMethod.super.mayOrMayNotImplementThisMethod();
        }

}

での次の呼び出しの可読性について質問がありますmayOrMayNotImplementThisMethod

IDefaultMethod.super.mayOrMayNotImplementThisMethod();

上記の呼び出しでインターフェイス名を明示的に指定する理由は、クラスによって実装された複数のインターフェイスが同じメソッドを持つ場合の混乱を避けるためであることを理解しています。私が理解していないのは、superこのコンテキストでのキーワードの意味です。と言うときIDefaultMethod.super、ここでは正確に何を指していますか? IDefaultMethod.mayOrMayNotImplementThisMethod() は IDefaultMethod.super.mayOrMayNotImplementThisMethod() よりも読みやすいでしょうか? super キーワードを削除すると、静的メソッド呼び出しと非静的メソッド呼び出しを区別するという犠牲を払って読みやすくなります。

4

4 に答える 4

1

super継承元のクラスまたはインターフェイスを指します。オーバーライドされたという事実を無視してメソッドを呼び出したいということです。

使用thisすると、このクラス (またはサブクラス) を参照することになり、無限再帰が発生します。

于 2015-01-25T14:52:48.513 に答える
1

Java 8 インターフェースにも静的メソッドがあります。

というと、 IDefaultMethod.mayOrMayNotImplementThisMethod();
次に、静的メソッドを呼び出す方法ですが、クラスの静的メンバーにアクセスする方法に似ているため、これも正しいようです。

デフォルトのメソッドでは、'super' が使用されていない場合、'this' が使用されている可能性がありますが、'this' はメソッド呼び出しを行っているクラスに属しているため意味がありません。

私の意見では、読みやすさが良くないので正しいですが、言語設計どおりのようです。

于 2017-02-19T07:51:46.577 に答える