web-dev-qa-db-ja.com

Java継承-スーパークラスメソッドの呼び出し

私は次の2つのクラスを持っていると仮定しましょう

_public class alpha {

    public alpha(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class beta extends alpha {

    public beta(){
        //some logic
    }

    public void alphaMethod1(){
        //some logic
    }
}

public class Test extends beta
{
     public static void main(String[] args)
      {
        beta obj = new beta();
        obj.alphaMethod1();// Here I want to call the method from class alpha.
       }
}
_

タイプbetaの新しいオブジェクトを開始する場合、ベータではなくクラスalphaにある_alphamethod1_ロジックを実行するにはどうすればよいですか? super().alphaMethod1()のみを使用できますか?<-これが可能かどうか疑問に思います。

EclipseのオートタイプIDEは、クラスalphaまたはクラスbetaのいずれかから_alphamethod1_を選択するオプションを提供しています。

52
roz

できるよ:

super.alphaMethod1();

superは親への参照ですが、super()はコンストラクターであることに注意してください。

79
Michał Šrajer

単にsuper.alphaMethod1();を使用してください

Javaのスーパーキーワード を参照してください

19
Sandeep Pathak

ベータのオブジェクトを使用してアルファのalphaMethod1()を呼び出すことはできませんが、2つの解決策があります。

解決策1:ベータ版のalphaMethod1()からalphaのalphaMethod1()を呼び出す

_class Beta extends Alpha
{
  public void alphaMethod1()
  {
    super.alphaMethod1();
  }
}
_

または次のようなベータの他の方法から:

_class Beta extends Alpha
{
  public void foo()
  {
     super.alphaMethod1();
  }
}

class Test extends Beta 
{
   public static void main(String[] args)
   {
      Beta beta = new Beta();
      beta.foo();
   }
}
_

ソリューション2:アルファのオブジェクトを作成し、アルファのalphaMethod1()を呼び出します

_class Test extends Beta
{
   public static void main(String[] args)
   {
      Alpha alpha = new Alpha();
      alpha.alphaMethod1();
   }
}
_
12
CKR666

Superを使用してマザークラスからメソッドを呼び出すことは可能ですが、これはおそらく設計上の問題があることを意味します。おそらくB.alphaMethod1()はAのメソッドをオーバーライドしてB.betaMethod1()と呼ばれるべきではありません。

状況に応じて、次のようなコードロジックを配置できます。

public void alphaMethod1(){
    if (something) {
        super.alphaMethod1();
        return;
    }
    // Rest of the code for other situations
}

このように、必要な場合にのみAのメソッドを呼び出し、クラスユーザーには表示されません。

4
Dalshim

子クラスオブジェクトを作成すると、そのオブジェクトには親クラスのすべての機能があります。ここで、Super()は、親の親の施設です。

そのときにsuper()を記述すると、親のデフォルトコンストラクターが呼び出されます。スーパーを書く場合も同じです。

このキーワードは、親にアクセスするためのスーパーキーWord機能と同じ現在のオブジェクトを参照します。

3
Pradip Bhatt