85

super()現在、Java コースでクラスの継承について学んでいますが、呼び出しをいつ使用すればよいかわかりません。

編集:使用されている
コードのこの例を見つけました:super.variable

class A
{
    int k = 10;
}

class Test extends A
{
    public void m() {
        System.out.println(super.k);
    }
}

したがって、ここでは、スーパークラスsuperの変数にアクセスするために使用する必要があることを理解しています。kしかし、それ以外の場合はどうsuper();すればよいでしょうか? そのままで?

4

11 に答える 11

148

正確に 呼び出すsuper()ことは常に冗長です。それ以外の場合は暗黙的に行われることを明示的に行っています。これは、スーパー コンストラクターの呼び出しを省略した場合でも、引数のないスーパー コンストラクターが自動的に呼び出されるためです。スタイルが悪いとは言いません。明示的であることを好む人もいます。

ただし、スーパー コンストラクターがサブクラスから渡したい引数を受け取る場合に便利です。

public class Animal {
   private final String noise;
   protected Animal(String noise) {
      this.noise = noise;
   }

   public void makeNoise() {
      System.out.println(noise);
   }
}

public class Pig extends Animal {
    public Pig() {
       super("Oink");
    }
}
于 2010-11-03T19:37:49.663 に答える
45

super親クラスのconstructormethodsを呼び出すために使用されます。properties

于 2010-11-03T19:33:42.120 に答える
25

superサブクラスでメソッドをオーバーライドしたときに親クラスからメソッドを呼び出したい場合は、サブクラスでキーワードを使用することもできます。

例:

public class CellPhone {
    public void print() {
        System.out.println("I'm a cellphone");
    }
}

public class TouchPhone extends CellPhone {
    @Override
    public void print() {
        super.print();
        System.out.println("I'm a touch screen cellphone");
    }
    public static void main (strings[] args) {
        TouchPhone p = new TouchPhone();
        p.print();
    }
}

ここで、行はスーパークラスのメソッドをsuper.print()呼び出します。出力は次のようになります。print()CellPhone

I'm a cellphone
I'm a touch screen cellphone
于 2013-03-08T19:20:13.320 に答える
11

サブクラス コンストラクターの最初の行として使用して、その親クラスのコンストラクターを呼び出します。

例えば:

public class TheSuper{
    public TheSuper(){
        eatCake();
    }
}

public class TheSub extends TheSuper{
    public TheSub(){
        super();
        eatMoreCake();
    }
}

のインスタンスを作成すると、とのTheSub両方が呼び出されます。eatCake()eatMoreCake()

于 2010-11-03T19:29:31.260 に答える
9

スーパー クラス コンストラクターを呼び出したい場合 - その中のフィールドを初期化します。いつ使用するかについては、次の記事を参照してください。

http://download.oracle.com/javase/tutorial/java/IandI/super.html

于 2010-11-03T19:28:48.790 に答える
1

これを使用して、スーパークラスのメソッドを呼び出すことができます (そのようなメソッドをオーバーライドする場合、super.foo() など)。方法。

于 2010-11-03T19:28:08.523 に答える
1

Super は親メソッドを呼び出します。参照: http://leepoint.net/notes-java/oop/constructors/constructor-super.html

于 2010-11-03T19:28:18.500 に答える
1

super()スーパークラスのコンストラクターを具体的に実行するために呼び出します。クラスが複数のコンストラクターを持つことができる場合、特定のコンストラクターを使用して呼び出すか、super()Javasuper(param,param)にそれを処理させて標準のコンストラクターを呼び出すことができます。クラス階層に従うクラスは、「is-a」関係に従うことに注意してください。

于 2010-11-03T19:30:01.200 に答える
0

サブクラスのコンストラクターの最初の行はsuper()、スーパークラスのコンストラクターが確実に呼び出されるようにするための呼び出しでなければなりません。

于 2010-11-03T19:28:35.020 に答える
0

super(); とコメントして、試してみました。@Mark Petersが言ったように、コメントせずに同じことをします

package javaapplication6;

/**
 *
 * @author sborusu
 */
public class Super_Test {
    Super_Test(){
        System.out.println("This is super class, no object is created");
    }
}
class Super_sub extends Super_Test{
    Super_sub(){
       super();
       System.out.println("This is sub class, object is created");
    }
    public static void main(String args[]){
        new Super_sub();
    }
}
于 2016-10-19T09:11:21.610 に答える
0

オラクルのドキュメントページから:

メソッドがそのスーパークラスのメソッドの 1 つをオーバーライドする場合、キーワード を使用してオーバーライドされたメソッドを呼び出すことができますsuper

superを使用して非表示フィールドを参照することもできます (ただし、フィールドを非表示にすることは推奨されません)。

superサブクラスのコンストラクターでの使用:

スーパークラス コンストラクターの呼び出しは、サブクラス コンストラクターの最初の行である必要があります。

スーパークラス コンストラクターを呼び出す構文は次のとおりです。

super();  

また:

super(parameter list);

ではsuper()、引数なしのスーパークラス コンストラクターが呼び出されます。ではsuper(parameter list)、一致するパラメーター リストを持つスーパークラス コンストラクターが呼び出されます。

注:コンストラクターが明示的にスーパークラス コンストラクターを呼び出さない場合、Java コンパイラーはスーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパー クラスに引数のないコンストラクタがない場合、コンパイル時エラーが発生します。

関連記事:

ポリモーフィズム vs オーバーライド vs オーバーロード

于 2016-10-02T12:29:50.513 に答える