0

2 つのクラスがあるAとしBます。

class A
{
    void method()
    {
        System.out.println("a.method");
    }
}
class B extends A
{
    @Override
    void method()
    {
        System.out.println("b.method");
    }
}

Bとしてインスタンス化した後、のメソッドを のようbに呼び出すことができます。のメソッド呼び出しのメソッドを で作成することもできます。しかし、インターフェースが次の場合はどうでしょうか。Bb.method()BAsuper.method()A

interface A
{
    default void method()
    {
        System.out.println("a.method");
    }
}
class B implements A
{
    @Override
    void method()
    {
        System.out.println("b.method");
    }
}

Bのメソッドを のメソッドを呼び出す方法はありAますか?

4

1 に答える 1

2

はい、できます。使用する

A.super.method();

JLSの状態

フォームがTypeName . super . [TypeArguments] Identifierの場合:

TypeNameがクラスでもインターフェースでもない場合は、コンパイル時エラーです。

がクラス C を表す場合TypeName、検索するクラスは C のスーパークラスです。

C が現在のクラスの字句的に囲んでいる型宣言でない場合、または C がクラス Object である場合、コンパイル時エラーになります。

メソッドT呼び出しをすぐに囲む型宣言とします。Tがクラス Object の場合、コンパイル時エラーです。

それ以外の場合TypeNameは、検索するインターフェイスを示しますI

于 2014-04-07T13:24:13.677 に答える