2

この例で私の質問を説明しました

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}

class Mercedes extends Car {
    public void start(){
        System.out.println("Mercedes Started!!!");
    }
}

さて、私のメインプログラムでは、

Mercedes m = new Mercedes();
m.start();

次のように出力されます: Mercedes Started!!!

出力ができるように、同じオブジェクトを使用してクラスのstart()メソッドを呼び出すにはどうすればよいですかCar

車が始動しました!!! .

編集

実際に私が参加した面接で聞かれました。スーパーキーワードの答えを出しました。しかし、インタビュアーはそれを否定しました。彼は私にヒントを与えると言い、Virtual Function と言いました。そのヒントの使い方がわかりません。

4

6 に答える 6

3

メソッドは、次のようなスーパー実装を呼び出す必要があります。

public void start(){
    super.start();
    System.out.println("Mercedes Started!!!");
}

またはそうではありません。その場合、親の実装を置き換えたと言っています。

良い考えではありませんが、メソッドを追加することでこれを回避できます。

public void startCar(){
    super.start();
}
于 2012-09-15T15:10:14.413 に答える
1

スーパークラスのメソッドMercedesを呼び出すには、クラスに別のメソッドを追加する必要があります。start

public void superStart() { super.start(); }

このsuperキーワードを使用すると、継承元のクラス (スーパークラス) にアクセスできます。詳しくはこちら

于 2012-09-15T15:12:12.680 に答える
1

メソッドはサブクラスでオーバーライドされているため、スーパークラスのメソッドを効果的に置き換えています。

サブクラス自体は、スーパークラスのメソッドを呼び出すことができます:

class Mercedes extends Car {
  public void startFromCar() {
    super.start();
  }
  public void start(){
    System.out.println("Mercedes Started!!!");
  }
}
于 2012-09-15T15:07:37.937 に答える
1

キーワードsuper

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}
class Mercedes extends Car {
    public void start(){
        super.start();
    }
}

編集:

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
}
class Mercedes extends Car {
}

今、あなたがnew Mercedes().start();「Car Started!!!」と呼んだら 印刷されます。

于 2012-09-15T15:09:18.127 に答える
1

親クラスのメソッドを子クラスで上書きしました。そのようなメソッドにアクセスするにsuperは、キーワードが使用されます。

とても変化している

class Mercedes extends Car {
public void start(){
    System.out.println("Mercedes Started!!!");
}

}

class Mercedes extends Car {
public void start(){
    super.start();
    System.out.println("Mercedes Started!!!");
}

}

印刷します

Car Started!!!
Mercedes Started!!!

または、指定された関数を変更せずに個別にアクセスしたい場合は、Mercedesクラスで新しいメソッドを定義してみてください。

public void startCar(){
    super.start();
}

この関数を呼び出すと、目的に役立ちます。

于 2012-09-15T15:18:13.557 に答える
0

別のオプションがあります

class Car {
    public void start(){
        System.out.println("Car Started!!!");
    }
 }
 Class Mercedes extends Car {
    //nothing here
 }

それから電話

Mercedes m = new Mercedes();
m.start();

印刷されます:

車が始まりました!!!

メルセデスに似たオブジェクトを印刷したい場合は、代わりに車を始めてください!!! このように見えるはずです

    class AlfaRomeo extends Car {.
        @override
        public void start(){
        System.out.println("Car Started!!!");  
        System.out.println("Its AlfaRomeo!!!");
        }
    }

@override は、Java に親ではなく子のメソッドを使用するように指示しました。

AlfaRomeo a = new AlfaRomeo();
 a.start();

したがって、印刷は次のようになります。

車が始まりました!!!

アルファロメオ!!!

于 2012-09-15T15:39:12.887 に答える