Javaでは、派生クラスのオーバーライドメソッドから基本クラスのメソッドを呼び出す方法を教えてください。


137

私は2つのJavaクラスを持っています。Bは、次のように別のクラスAを拡張します。

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

私は呼びたいでしょうA.myMethod()からB.myMethod()。私はC ++の世界出身ですが、Javaでこの基本的なことを行う方法がわかりません。

回答:


145

あなたが探しているキーワードはですsuper。たとえば、このガイドを参照してください。


4
C ++では特定の祖先メソッドを呼び出すことができますが、Javaでは呼び出せません。チェーンに渡すだけです...
rogerdpack

132

superを使用して呼び出すだけです。

public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}

21

答えは次のとおりです。

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

super.MyMethod()の内部で呼び出す必要がMyMethod()ありclass Bます。したがって、次のようになります

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { 
        super.MyMethod();
        /* Another code */ 
    }
}


7

Javaリフレクションメカニズムを使用してそれを実行できると確信しています。これは、superを使用するほど簡単ではありませんが、より強力です。

class A
{
    public void myMethod()
    { /* ... */ }
}

class B extends A
{
    public void myMethod()
    {
        super.myMethod(); // calling parent method
    }
}

これはコードにJavaリフレクションを表示せず、他のコードと同じです。答えはまだありますか?
Nelda.techspiress 2017


3
super.baseMethod(params);

superキーワードを使用して基本メソッドを呼び出し、それぞれのパラメーターを渡します。


3
class test
{
    void message()
    {
        System.out.println("super class");
    }
}

class demo extends test
{
    int z;
    demo(int y)
    {
        super.message();
        z=y;
        System.out.println("re:"+z);
    }
}
class free{
    public static void main(String ar[]){
        demo d=new demo(6);
    }
}

3

ここで、基本クラスのメソッドの1つをオーバーライドしているため、継承クラスから基本クラスメソッドを呼び出す場合は、継承クラスの同じメソッドでスーパーキーワードを使用する必要があります。


1

これらのメソッドを使用して初期化する場合は、クラスAのコンストラクターを使用し、クラスBのコンストラクター内にsuperキーワードを渡します。

または、サブクラスメソッドからスーパークラスのメソッドを呼び出す場合は、次のようにサブクラスメソッド内でsuperキーワードを使用する必要があります。super.myMethod();


1
// Using super keyword access parent class variable
class test {
    int is,xs;

    test(int i,int x) {
        is=i;
        xs=x;
        System.out.println("super class:");
    }
}

class demo extends test {
    int z;

    demo(int i,int x,int y) {
        super(i,x);
        z=y;
        System.out.println("re:"+is);
        System.out.println("re:"+xs);
        System.out.println("re:"+z);
    }
}

class free{
    public static void main(String ar[]){
        demo d=new demo(4,5,6);
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.